package com.peppa.xtext.esaml.parser.antlr.internal;

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import com.peppa.xtext.esaml.services.ESAMLGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
@SuppressWarnings("all")
public class InternalESAMLParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_ISO8601_DATE_TIME", "RULE_IMPLNAME", "RULE_HEXADECIMAL", "RULE_INT", "RULE_DOUBLE", "RULE_DIGIT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'sync'", "'async'", "'input'", "'output'", "'inout'", "'port'", "';'", "'time'", "'event'", "'data'", "'provide'", "'require'", "'access'", "'period'", "'ms'", "'stateval'", "'enum'", "'&'", "','", "'->'", "'system'", "'subsystem'", "'activity'", "'features'", "'properties'", "'end'", "'state'", "'timetrigger'", "'monitor'", "'='", "'>'", "'at'", "'after'", "'before'", "'excute'", "':'", "'.'", "'initact'", "'initstate'", "'['", "']'", "'<-'", "'<->'", "'self'", "'<'", "'components'", "'processes'", "'schedule'", "'transitions'", "'operations'", "'implementation'", "'init'", "'channels'", "'activatedguards'", "'{'", "'ready'", "'}'", "'entry'", "'during'", "'exit'", "'constraints'", "'void'", "'bool'", "'char'", "'short'", "'int'", "'long'", "'float'", "'double'", "'xorsplit'", "'xorjoin'", "'andsplit'", "'andjoin'", "'||'", "'&&'", "'=='", "'!='", "'<='", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "'('", "')'", "'true'", "'false'"
    };
    public static final int T__50=50;
    public static final int T__59=59;
    public static final int T__55=55;
    public static final int T__56=56;
    public static final int T__57=57;
    public static final int T__58=58;
    public static final int T__51=51;
    public static final int T__52=52;
    public static final int T__53=53;
    public static final int T__54=54;
    public static final int T__60=60;
    public static final int T__61=61;
    public static final int RULE_ID=4;
    public static final int RULE_DIGIT=11;
    public static final int RULE_INT=9;
    public static final int T__66=66;
    public static final int RULE_ML_COMMENT=12;
    public static final int T__67=67;
    public static final int RULE_HEXADECIMAL=8;
    public static final int T__68=68;
    public static final int T__69=69;
    public static final int T__62=62;
    public static final int T__63=63;
    public static final int T__64=64;
    public static final int T__65=65;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int T__39=39;
    public static final int T__33=33;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__36=36;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int T__32=32;
    public static final int T__48=48;
    public static final int T__49=49;
    public static final int T__44=44;
    public static final int T__45=45;
    public static final int T__46=46;
    public static final int T__47=47;
    public static final int T__40=40;
    public static final int T__41=41;
    public static final int T__42=42;
    public static final int T__43=43;
    public static final int T__91=91;
    public static final int T__100=100;
    public static final int T__92=92;
    public static final int T__93=93;
    public static final int T__102=102;
    public static final int T__94=94;
    public static final int T__101=101;
    public static final int T__90=90;
    public static final int RULE_ISO8601_DATE_TIME=6;
    public static final int T__19=19;
    public static final int T__16=16;
    public static final int T__17=17;
    public static final int T__18=18;
    public static final int T__99=99;
    public static final int T__95=95;
    public static final int T__96=96;
    public static final int T__97=97;
    public static final int T__98=98;
    public static final int T__26=26;
    public static final int T__27=27;
    public static final int T__28=28;
    public static final int T__29=29;
    public static final int T__22=22;
    public static final int T__23=23;
    public static final int T__24=24;
    public static final int T__25=25;
    public static final int T__20=20;
    public static final int T__21=21;
    public static final int T__70=70;
    public static final int T__71=71;
    public static final int T__72=72;
    public static final int RULE_STRING=5;
    public static final int RULE_SL_COMMENT=13;
    public static final int RULE_DOUBLE=10;
    public static final int T__77=77;
    public static final int RULE_IMPLNAME=7;
    public static final int T__78=78;
    public static final int T__79=79;
    public static final int T__73=73;
    public static final int EOF=-1;
    public static final int T__74=74;
    public static final int T__75=75;
    public static final int T__76=76;
    public static final int T__80=80;
    public static final int T__81=81;
    public static final int T__82=82;
    public static final int T__83=83;
    public static final int RULE_WS=14;
    public static final int RULE_ANY_OTHER=15;
    public static final int T__88=88;
    public static final int T__89=89;
    public static final int T__84=84;
    public static final int T__104=104;
    public static final int T__85=85;
    public static final int T__103=103;
    public static final int T__86=86;
    public static final int T__87=87;

    // delegates
    // delegators


        public InternalESAMLParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalESAMLParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalESAMLParser.tokenNames; }
    public String getGrammarFileName() { return "InternalESAML.g"; }



     	private ESAMLGrammarAccess grammarAccess;

        public InternalESAMLParser(TokenStream input, ESAMLGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }

        @Override
        protected String getFirstRuleName() {
        	return "Model";
       	}

       	@Override
       	protected ESAMLGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}




    // $ANTLR start "entryRuleModel"
    // InternalESAML.g:64:1: entryRuleModel returns [EObject current=null] : iv_ruleModel= ruleModel EOF ;
    public final EObject entryRuleModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleModel = null;


        try {
            // InternalESAML.g:64:46: (iv_ruleModel= ruleModel EOF )
            // InternalESAML.g:65:2: iv_ruleModel= ruleModel EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getModelRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleModel=ruleModel();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleModel; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleModel"


    // $ANTLR start "ruleModel"
    // InternalESAML.g:71:1: ruleModel returns [EObject current=null] : ( (lv_abstractModel_0_0= ruleAbstractModel ) )* ;
    public final EObject ruleModel() throws RecognitionException {
        EObject current = null;

        EObject lv_abstractModel_0_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:77:2: ( ( (lv_abstractModel_0_0= ruleAbstractModel ) )* )
            // InternalESAML.g:78:2: ( (lv_abstractModel_0_0= ruleAbstractModel ) )*
            {
            // InternalESAML.g:78:2: ( (lv_abstractModel_0_0= ruleAbstractModel ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==25||LA1_0==32||(LA1_0>=36 && LA1_0<=38)||(LA1_0>=42 && LA1_0<=44)||(LA1_0>=85 && LA1_0<=88)) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // InternalESAML.g:79:3: (lv_abstractModel_0_0= ruleAbstractModel )
            	    {
            	    // InternalESAML.g:79:3: (lv_abstractModel_0_0= ruleAbstractModel )
            	    // InternalESAML.g:80:4: lv_abstractModel_0_0= ruleAbstractModel
            	    {
            	    if ( state.backtracking==0 ) {

            	      				newCompositeNode(grammarAccess.getModelAccess().getAbstractModelAbstractModelParserRuleCall_0());
            	      			
            	    }
            	    pushFollow(FOLLOW_3);
            	    lv_abstractModel_0_0=ruleAbstractModel();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				if (current==null) {
            	      					current = createModelElementForParent(grammarAccess.getModelRule());
            	      				}
            	      				add(
            	      					current,
            	      					"abstractModel",
            	      					lv_abstractModel_0_0,
            	      					"com.peppa.xtext.esaml.ESAML.AbstractModel");
            	      				afterParserOrEnumRuleCall();
            	      			
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleModel"


    // $ANTLR start "entryRuleAbstractModel"
    // InternalESAML.g:100:1: entryRuleAbstractModel returns [EObject current=null] : iv_ruleAbstractModel= ruleAbstractModel EOF ;
    public final EObject entryRuleAbstractModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractModel = null;


        try {
            // InternalESAML.g:100:54: (iv_ruleAbstractModel= ruleAbstractModel EOF )
            // InternalESAML.g:101:2: iv_ruleAbstractModel= ruleAbstractModel EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbstractModelRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleAbstractModel=ruleAbstractModel();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbstractModel; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbstractModel"


    // $ANTLR start "ruleAbstractModel"
    // InternalESAML.g:107:1: ruleAbstractModel returns [EObject current=null] : (this_ComponentType_0= ruleComponentType | this_ComponentImpl_1= ruleComponentImpl ) ;
    public final EObject ruleAbstractModel() throws RecognitionException {
        EObject current = null;

        EObject this_ComponentType_0 = null;

        EObject this_ComponentImpl_1 = null;



        	enterRule();

        try {
            // InternalESAML.g:113:2: ( (this_ComponentType_0= ruleComponentType | this_ComponentImpl_1= ruleComponentImpl ) )
            // InternalESAML.g:114:2: (this_ComponentType_0= ruleComponentType | this_ComponentImpl_1= ruleComponentImpl )
            {
            // InternalESAML.g:114:2: (this_ComponentType_0= ruleComponentType | this_ComponentImpl_1= ruleComponentImpl )
            int alt2=2;
            alt2 = dfa2.predict(input);
            switch (alt2) {
                case 1 :
                    // InternalESAML.g:115:3: this_ComponentType_0= ruleComponentType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAbstractModelAccess().getComponentTypeParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_ComponentType_0=ruleComponentType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_ComponentType_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:124:3: this_ComponentImpl_1= ruleComponentImpl
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getAbstractModelAccess().getComponentImplParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_ComponentImpl_1=ruleComponentImpl();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_ComponentImpl_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbstractModel"


    // $ANTLR start "entryRuleComponentType"
    // InternalESAML.g:136:1: entryRuleComponentType returns [EObject current=null] : iv_ruleComponentType= ruleComponentType EOF ;
    public final EObject entryRuleComponentType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleComponentType = null;


        try {
            // InternalESAML.g:136:54: (iv_ruleComponentType= ruleComponentType EOF )
            // InternalESAML.g:137:2: iv_ruleComponentType= ruleComponentType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getComponentTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleComponentType=ruleComponentType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleComponentType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleComponentType"


    // $ANTLR start "ruleComponentType"
    // InternalESAML.g:143:1: ruleComponentType returns [EObject current=null] : (this_SystemType_0= ruleSystemType | this_SubSystemType_1= ruleSubSystemType | this_ActivityType_2= ruleActivityType | this_StateType_3= ruleStateType | this_TimeTriggerType_4= ruleTimeTriggerType | this_MonitorType_5= ruleMonitorType | this_DataComponentType_6= ruleDataComponentType | this_EnumType_7= ruleEnumType ) ;
    public final EObject ruleComponentType() throws RecognitionException {
        EObject current = null;

        EObject this_SystemType_0 = null;

        EObject this_SubSystemType_1 = null;

        EObject this_ActivityType_2 = null;

        EObject this_StateType_3 = null;

        EObject this_TimeTriggerType_4 = null;

        EObject this_MonitorType_5 = null;

        EObject this_DataComponentType_6 = null;

        EObject this_EnumType_7 = null;



        	enterRule();

        try {
            // InternalESAML.g:149:2: ( (this_SystemType_0= ruleSystemType | this_SubSystemType_1= ruleSubSystemType | this_ActivityType_2= ruleActivityType | this_StateType_3= ruleStateType | this_TimeTriggerType_4= ruleTimeTriggerType | this_MonitorType_5= ruleMonitorType | this_DataComponentType_6= ruleDataComponentType | this_EnumType_7= ruleEnumType ) )
            // InternalESAML.g:150:2: (this_SystemType_0= ruleSystemType | this_SubSystemType_1= ruleSubSystemType | this_ActivityType_2= ruleActivityType | this_StateType_3= ruleStateType | this_TimeTriggerType_4= ruleTimeTriggerType | this_MonitorType_5= ruleMonitorType | this_DataComponentType_6= ruleDataComponentType | this_EnumType_7= ruleEnumType )
            {
            // InternalESAML.g:150:2: (this_SystemType_0= ruleSystemType | this_SubSystemType_1= ruleSubSystemType | this_ActivityType_2= ruleActivityType | this_StateType_3= ruleStateType | this_TimeTriggerType_4= ruleTimeTriggerType | this_MonitorType_5= ruleMonitorType | this_DataComponentType_6= ruleDataComponentType | this_EnumType_7= ruleEnumType )
            int alt3=8;
            switch ( input.LA(1) ) {
            case 36:
                {
                alt3=1;
                }
                break;
            case 37:
                {
                alt3=2;
                }
                break;
            case 38:
            case 85:
            case 86:
            case 87:
            case 88:
                {
                alt3=3;
                }
                break;
            case 42:
                {
                alt3=4;
                }
                break;
            case 43:
                {
                alt3=5;
                }
                break;
            case 44:
                {
                alt3=6;
                }
                break;
            case 25:
                {
                alt3=7;
                }
                break;
            case 32:
                {
                alt3=8;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 3, 0, input);

                throw nvae;
            }

            switch (alt3) {
                case 1 :
                    // InternalESAML.g:151:3: this_SystemType_0= ruleSystemType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentTypeAccess().getSystemTypeParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_SystemType_0=ruleSystemType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_SystemType_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:160:3: this_SubSystemType_1= ruleSubSystemType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentTypeAccess().getSubSystemTypeParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_SubSystemType_1=ruleSubSystemType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_SubSystemType_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:169:3: this_ActivityType_2= ruleActivityType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentTypeAccess().getActivityTypeParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_ActivityType_2=ruleActivityType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_ActivityType_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalESAML.g:178:3: this_StateType_3= ruleStateType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentTypeAccess().getStateTypeParserRuleCall_3());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_StateType_3=ruleStateType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_StateType_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalESAML.g:187:3: this_TimeTriggerType_4= ruleTimeTriggerType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentTypeAccess().getTimeTriggerTypeParserRuleCall_4());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_TimeTriggerType_4=ruleTimeTriggerType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_TimeTriggerType_4;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalESAML.g:196:3: this_MonitorType_5= ruleMonitorType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentTypeAccess().getMonitorTypeParserRuleCall_5());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_MonitorType_5=ruleMonitorType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_MonitorType_5;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 7 :
                    // InternalESAML.g:205:3: this_DataComponentType_6= ruleDataComponentType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentTypeAccess().getDataComponentTypeParserRuleCall_6());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_DataComponentType_6=ruleDataComponentType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_DataComponentType_6;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 8 :
                    // InternalESAML.g:214:3: this_EnumType_7= ruleEnumType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentTypeAccess().getEnumTypeParserRuleCall_7());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_EnumType_7=ruleEnumType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_EnumType_7;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleComponentType"


    // $ANTLR start "entryRuleComponentImpl"
    // InternalESAML.g:226:1: entryRuleComponentImpl returns [EObject current=null] : iv_ruleComponentImpl= ruleComponentImpl EOF ;
    public final EObject entryRuleComponentImpl() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleComponentImpl = null;


        try {
            // InternalESAML.g:226:54: (iv_ruleComponentImpl= ruleComponentImpl EOF )
            // InternalESAML.g:227:2: iv_ruleComponentImpl= ruleComponentImpl EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getComponentImplRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleComponentImpl=ruleComponentImpl();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleComponentImpl; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleComponentImpl"


    // $ANTLR start "ruleComponentImpl"
    // InternalESAML.g:233:1: ruleComponentImpl returns [EObject current=null] : (this_SystemImpl_0= ruleSystemImpl | this_SubSystemImpl_1= ruleSubSystemImpl | this_ActivityImpl_2= ruleActivityImpl | this_StateImpl_3= ruleStateImpl | this_TimeTriggerImpl_4= ruleTimeTriggerImpl | this_MonitorImpl_5= ruleMonitorImpl | this_DataComponentImpl_6= ruleDataComponentImpl ) ;
    public final EObject ruleComponentImpl() throws RecognitionException {
        EObject current = null;

        EObject this_SystemImpl_0 = null;

        EObject this_SubSystemImpl_1 = null;

        EObject this_ActivityImpl_2 = null;

        EObject this_StateImpl_3 = null;

        EObject this_TimeTriggerImpl_4 = null;

        EObject this_MonitorImpl_5 = null;

        EObject this_DataComponentImpl_6 = null;



        	enterRule();

        try {
            // InternalESAML.g:239:2: ( (this_SystemImpl_0= ruleSystemImpl | this_SubSystemImpl_1= ruleSubSystemImpl | this_ActivityImpl_2= ruleActivityImpl | this_StateImpl_3= ruleStateImpl | this_TimeTriggerImpl_4= ruleTimeTriggerImpl | this_MonitorImpl_5= ruleMonitorImpl | this_DataComponentImpl_6= ruleDataComponentImpl ) )
            // InternalESAML.g:240:2: (this_SystemImpl_0= ruleSystemImpl | this_SubSystemImpl_1= ruleSubSystemImpl | this_ActivityImpl_2= ruleActivityImpl | this_StateImpl_3= ruleStateImpl | this_TimeTriggerImpl_4= ruleTimeTriggerImpl | this_MonitorImpl_5= ruleMonitorImpl | this_DataComponentImpl_6= ruleDataComponentImpl )
            {
            // InternalESAML.g:240:2: (this_SystemImpl_0= ruleSystemImpl | this_SubSystemImpl_1= ruleSubSystemImpl | this_ActivityImpl_2= ruleActivityImpl | this_StateImpl_3= ruleStateImpl | this_TimeTriggerImpl_4= ruleTimeTriggerImpl | this_MonitorImpl_5= ruleMonitorImpl | this_DataComponentImpl_6= ruleDataComponentImpl )
            int alt4=7;
            switch ( input.LA(1) ) {
            case 36:
                {
                alt4=1;
                }
                break;
            case 37:
                {
                alt4=2;
                }
                break;
            case 38:
                {
                alt4=3;
                }
                break;
            case 42:
                {
                alt4=4;
                }
                break;
            case 43:
                {
                alt4=5;
                }
                break;
            case 44:
                {
                alt4=6;
                }
                break;
            case 25:
                {
                alt4=7;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }

            switch (alt4) {
                case 1 :
                    // InternalESAML.g:241:3: this_SystemImpl_0= ruleSystemImpl
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentImplAccess().getSystemImplParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_SystemImpl_0=ruleSystemImpl();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_SystemImpl_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:250:3: this_SubSystemImpl_1= ruleSubSystemImpl
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentImplAccess().getSubSystemImplParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_SubSystemImpl_1=ruleSubSystemImpl();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_SubSystemImpl_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:259:3: this_ActivityImpl_2= ruleActivityImpl
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentImplAccess().getActivityImplParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_ActivityImpl_2=ruleActivityImpl();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_ActivityImpl_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalESAML.g:268:3: this_StateImpl_3= ruleStateImpl
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentImplAccess().getStateImplParserRuleCall_3());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_StateImpl_3=ruleStateImpl();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_StateImpl_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalESAML.g:277:3: this_TimeTriggerImpl_4= ruleTimeTriggerImpl
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentImplAccess().getTimeTriggerImplParserRuleCall_4());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_TimeTriggerImpl_4=ruleTimeTriggerImpl();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_TimeTriggerImpl_4;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalESAML.g:286:3: this_MonitorImpl_5= ruleMonitorImpl
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentImplAccess().getMonitorImplParserRuleCall_5());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_MonitorImpl_5=ruleMonitorImpl();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_MonitorImpl_5;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 7 :
                    // InternalESAML.g:295:3: this_DataComponentImpl_6= ruleDataComponentImpl
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getComponentImplAccess().getDataComponentImplParserRuleCall_6());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_DataComponentImpl_6=ruleDataComponentImpl();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_DataComponentImpl_6;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleComponentImpl"


    // $ANTLR start "entryRuleFeature"
    // InternalESAML.g:307:1: entryRuleFeature returns [EObject current=null] : iv_ruleFeature= ruleFeature EOF ;
    public final EObject entryRuleFeature() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFeature = null;


        try {
            // InternalESAML.g:307:48: (iv_ruleFeature= ruleFeature EOF )
            // InternalESAML.g:308:2: iv_ruleFeature= ruleFeature EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFeatureRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleFeature=ruleFeature();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleFeature; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFeature"


    // $ANTLR start "ruleFeature"
    // InternalESAML.g:314:1: ruleFeature returns [EObject current=null] : (this_PortFeature_0= rulePortFeature | this_AccessFeature_1= ruleAccessFeature ) ;
    public final EObject ruleFeature() throws RecognitionException {
        EObject current = null;

        EObject this_PortFeature_0 = null;

        EObject this_AccessFeature_1 = null;



        	enterRule();

        try {
            // InternalESAML.g:320:2: ( (this_PortFeature_0= rulePortFeature | this_AccessFeature_1= ruleAccessFeature ) )
            // InternalESAML.g:321:2: (this_PortFeature_0= rulePortFeature | this_AccessFeature_1= ruleAccessFeature )
            {
            // InternalESAML.g:321:2: (this_PortFeature_0= rulePortFeature | this_AccessFeature_1= ruleAccessFeature )
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( ((LA5_0>=16 && LA5_0<=20)) ) {
                alt5=1;
            }
            else if ( ((LA5_0>=26 && LA5_0<=27)) ) {
                alt5=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 5, 0, input);

                throw nvae;
            }
            switch (alt5) {
                case 1 :
                    // InternalESAML.g:322:3: this_PortFeature_0= rulePortFeature
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getFeatureAccess().getPortFeatureParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_PortFeature_0=rulePortFeature();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_PortFeature_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:331:3: this_AccessFeature_1= ruleAccessFeature
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getFeatureAccess().getAccessFeatureParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_AccessFeature_1=ruleAccessFeature();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_AccessFeature_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFeature"


    // $ANTLR start "entryRulePortFeature"
    // InternalESAML.g:343:1: entryRulePortFeature returns [EObject current=null] : iv_rulePortFeature= rulePortFeature EOF ;
    public final EObject entryRulePortFeature() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePortFeature = null;


        try {
            // InternalESAML.g:343:52: (iv_rulePortFeature= rulePortFeature EOF )
            // InternalESAML.g:344:2: iv_rulePortFeature= rulePortFeature EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPortFeatureRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_rulePortFeature=rulePortFeature();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePortFeature; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePortFeature"


    // $ANTLR start "rulePortFeature"
    // InternalESAML.g:350:1: rulePortFeature returns [EObject current=null] : ( ( (lv_isSync_0_0= 'sync' ) )? ( (lv_isAsync_1_0= 'async' ) )? ( ( (lv_portDirection_2_1= 'input' | lv_portDirection_2_2= 'output' | lv_portDirection_2_3= 'inout' ) ) ) ( (lv_type_3_0= rulePortType ) ) otherlv_4= 'port' ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) ) ;
    public final EObject rulePortFeature() throws RecognitionException {
        EObject current = null;

        Token lv_isSync_0_0=null;
        Token lv_isAsync_1_0=null;
        Token lv_portDirection_2_1=null;
        Token lv_portDirection_2_2=null;
        Token lv_portDirection_2_3=null;
        Token otherlv_4=null;
        Token lv_name_5_0=null;
        Token otherlv_6=null;
        AntlrDatatypeRuleToken lv_type_3_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:356:2: ( ( ( (lv_isSync_0_0= 'sync' ) )? ( (lv_isAsync_1_0= 'async' ) )? ( ( (lv_portDirection_2_1= 'input' | lv_portDirection_2_2= 'output' | lv_portDirection_2_3= 'inout' ) ) ) ( (lv_type_3_0= rulePortType ) ) otherlv_4= 'port' ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) ) )
            // InternalESAML.g:357:2: ( ( (lv_isSync_0_0= 'sync' ) )? ( (lv_isAsync_1_0= 'async' ) )? ( ( (lv_portDirection_2_1= 'input' | lv_portDirection_2_2= 'output' | lv_portDirection_2_3= 'inout' ) ) ) ( (lv_type_3_0= rulePortType ) ) otherlv_4= 'port' ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) )
            {
            // InternalESAML.g:357:2: ( ( (lv_isSync_0_0= 'sync' ) )? ( (lv_isAsync_1_0= 'async' ) )? ( ( (lv_portDirection_2_1= 'input' | lv_portDirection_2_2= 'output' | lv_portDirection_2_3= 'inout' ) ) ) ( (lv_type_3_0= rulePortType ) ) otherlv_4= 'port' ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) )
            // InternalESAML.g:358:3: ( (lv_isSync_0_0= 'sync' ) )? ( (lv_isAsync_1_0= 'async' ) )? ( ( (lv_portDirection_2_1= 'input' | lv_portDirection_2_2= 'output' | lv_portDirection_2_3= 'inout' ) ) ) ( (lv_type_3_0= rulePortType ) ) otherlv_4= 'port' ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' )
            {
            // InternalESAML.g:358:3: ( (lv_isSync_0_0= 'sync' ) )?
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==16) ) {
                alt6=1;
            }
            switch (alt6) {
                case 1 :
                    // InternalESAML.g:359:4: (lv_isSync_0_0= 'sync' )
                    {
                    // InternalESAML.g:359:4: (lv_isSync_0_0= 'sync' )
                    // InternalESAML.g:360:5: lv_isSync_0_0= 'sync'
                    {
                    lv_isSync_0_0=(Token)match(input,16,FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_isSync_0_0, grammarAccess.getPortFeatureAccess().getIsSyncSyncKeyword_0_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getPortFeatureRule());
                      					}
                      					setWithLastConsumed(current, "isSync", lv_isSync_0_0 != null, "sync");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalESAML.g:372:3: ( (lv_isAsync_1_0= 'async' ) )?
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==17) ) {
                alt7=1;
            }
            switch (alt7) {
                case 1 :
                    // InternalESAML.g:373:4: (lv_isAsync_1_0= 'async' )
                    {
                    // InternalESAML.g:373:4: (lv_isAsync_1_0= 'async' )
                    // InternalESAML.g:374:5: lv_isAsync_1_0= 'async'
                    {
                    lv_isAsync_1_0=(Token)match(input,17,FOLLOW_5); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_isAsync_1_0, grammarAccess.getPortFeatureAccess().getIsAsyncAsyncKeyword_1_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getPortFeatureRule());
                      					}
                      					setWithLastConsumed(current, "isAsync", lv_isAsync_1_0 != null, "async");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalESAML.g:386:3: ( ( (lv_portDirection_2_1= 'input' | lv_portDirection_2_2= 'output' | lv_portDirection_2_3= 'inout' ) ) )
            // InternalESAML.g:387:4: ( (lv_portDirection_2_1= 'input' | lv_portDirection_2_2= 'output' | lv_portDirection_2_3= 'inout' ) )
            {
            // InternalESAML.g:387:4: ( (lv_portDirection_2_1= 'input' | lv_portDirection_2_2= 'output' | lv_portDirection_2_3= 'inout' ) )
            // InternalESAML.g:388:5: (lv_portDirection_2_1= 'input' | lv_portDirection_2_2= 'output' | lv_portDirection_2_3= 'inout' )
            {
            // InternalESAML.g:388:5: (lv_portDirection_2_1= 'input' | lv_portDirection_2_2= 'output' | lv_portDirection_2_3= 'inout' )
            int alt8=3;
            switch ( input.LA(1) ) {
            case 18:
                {
                alt8=1;
                }
                break;
            case 19:
                {
                alt8=2;
                }
                break;
            case 20:
                {
                alt8=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 8, 0, input);

                throw nvae;
            }

            switch (alt8) {
                case 1 :
                    // InternalESAML.g:389:6: lv_portDirection_2_1= 'input'
                    {
                    lv_portDirection_2_1=(Token)match(input,18,FOLLOW_6); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_portDirection_2_1, grammarAccess.getPortFeatureAccess().getPortDirectionInputKeyword_2_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getPortFeatureRule());
                      						}
                      						setWithLastConsumed(current, "portDirection", lv_portDirection_2_1, null);
                      					
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:400:6: lv_portDirection_2_2= 'output'
                    {
                    lv_portDirection_2_2=(Token)match(input,19,FOLLOW_6); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_portDirection_2_2, grammarAccess.getPortFeatureAccess().getPortDirectionOutputKeyword_2_0_1());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getPortFeatureRule());
                      						}
                      						setWithLastConsumed(current, "portDirection", lv_portDirection_2_2, null);
                      					
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:411:6: lv_portDirection_2_3= 'inout'
                    {
                    lv_portDirection_2_3=(Token)match(input,20,FOLLOW_6); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_portDirection_2_3, grammarAccess.getPortFeatureAccess().getPortDirectionInoutKeyword_2_0_2());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getPortFeatureRule());
                      						}
                      						setWithLastConsumed(current, "portDirection", lv_portDirection_2_3, null);
                      					
                    }

                    }
                    break;

            }


            }


            }

            // InternalESAML.g:424:3: ( (lv_type_3_0= rulePortType ) )
            // InternalESAML.g:425:4: (lv_type_3_0= rulePortType )
            {
            // InternalESAML.g:425:4: (lv_type_3_0= rulePortType )
            // InternalESAML.g:426:5: lv_type_3_0= rulePortType
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getPortFeatureAccess().getTypePortTypeParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_7);
            lv_type_3_0=rulePortType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getPortFeatureRule());
              					}
              					set(
              						current,
              						"type",
              						lv_type_3_0,
              						"com.peppa.xtext.esaml.ESAML.PortType");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_4=(Token)match(input,21,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getPortFeatureAccess().getPortKeyword_4());
              		
            }
            // InternalESAML.g:447:3: ( (lv_name_5_0= RULE_ID ) )
            // InternalESAML.g:448:4: (lv_name_5_0= RULE_ID )
            {
            // InternalESAML.g:448:4: (lv_name_5_0= RULE_ID )
            // InternalESAML.g:449:5: lv_name_5_0= RULE_ID
            {
            lv_name_5_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_5_0, grammarAccess.getPortFeatureAccess().getNameIDTerminalRuleCall_5_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getPortFeatureRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_5_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:465:3: ( ( ';' )=>otherlv_6= ';' )
            // InternalESAML.g:466:4: ( ';' )=>otherlv_6= ';'
            {
            otherlv_6=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_6, grammarAccess.getPortFeatureAccess().getSemicolonKeyword_6());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePortFeature"


    // $ANTLR start "entryRulePortType"
    // InternalESAML.g:476:1: entryRulePortType returns [String current=null] : iv_rulePortType= rulePortType EOF ;
    public final String entryRulePortType() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_rulePortType = null;


        try {
            // InternalESAML.g:476:48: (iv_rulePortType= rulePortType EOF )
            // InternalESAML.g:477:2: iv_rulePortType= rulePortType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPortTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_rulePortType=rulePortType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePortType.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePortType"


    // $ANTLR start "rulePortType"
    // InternalESAML.g:483:1: rulePortType returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'time' | kw= 'event' | kw= 'data' | (kw= 'event' kw= 'data' ) ) ;
    public final AntlrDatatypeRuleToken rulePortType() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalESAML.g:489:2: ( (kw= 'time' | kw= 'event' | kw= 'data' | (kw= 'event' kw= 'data' ) ) )
            // InternalESAML.g:490:2: (kw= 'time' | kw= 'event' | kw= 'data' | (kw= 'event' kw= 'data' ) )
            {
            // InternalESAML.g:490:2: (kw= 'time' | kw= 'event' | kw= 'data' | (kw= 'event' kw= 'data' ) )
            int alt9=4;
            switch ( input.LA(1) ) {
            case 23:
                {
                alt9=1;
                }
                break;
            case 24:
                {
                int LA9_2 = input.LA(2);

                if ( (LA9_2==EOF||LA9_2==21) ) {
                    alt9=2;
                }
                else if ( (LA9_2==25) ) {
                    alt9=4;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 9, 2, input);

                    throw nvae;
                }
                }
                break;
            case 25:
                {
                alt9=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 9, 0, input);

                throw nvae;
            }

            switch (alt9) {
                case 1 :
                    // InternalESAML.g:491:3: kw= 'time'
                    {
                    kw=(Token)match(input,23,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getPortTypeAccess().getTimeKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:497:3: kw= 'event'
                    {
                    kw=(Token)match(input,24,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getPortTypeAccess().getEventKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:503:3: kw= 'data'
                    {
                    kw=(Token)match(input,25,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getPortTypeAccess().getDataKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalESAML.g:509:3: (kw= 'event' kw= 'data' )
                    {
                    // InternalESAML.g:509:3: (kw= 'event' kw= 'data' )
                    // InternalESAML.g:510:4: kw= 'event' kw= 'data'
                    {
                    kw=(Token)match(input,24,FOLLOW_10); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getPortTypeAccess().getEventKeyword_3_0());
                      			
                    }
                    kw=(Token)match(input,25,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getPortTypeAccess().getDataKeyword_3_1());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePortType"


    // $ANTLR start "entryRuleAccessFeature"
    // InternalESAML.g:525:1: entryRuleAccessFeature returns [EObject current=null] : iv_ruleAccessFeature= ruleAccessFeature EOF ;
    public final EObject entryRuleAccessFeature() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAccessFeature = null;


        try {
            // InternalESAML.g:525:54: (iv_ruleAccessFeature= ruleAccessFeature EOF )
            // InternalESAML.g:526:2: iv_ruleAccessFeature= ruleAccessFeature EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAccessFeatureRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleAccessFeature=ruleAccessFeature();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAccessFeature; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAccessFeature"


    // $ANTLR start "ruleAccessFeature"
    // InternalESAML.g:532:1: ruleAccessFeature returns [EObject current=null] : ( ( ( (lv_accessDirection_0_1= 'provide' | lv_accessDirection_0_2= 'require' ) ) ) otherlv_1= 'data' otherlv_2= 'access' ( (lv_name_3_0= RULE_ID ) ) ( ( ';' )=>otherlv_4= ';' ) ) ;
    public final EObject ruleAccessFeature() throws RecognitionException {
        EObject current = null;

        Token lv_accessDirection_0_1=null;
        Token lv_accessDirection_0_2=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token lv_name_3_0=null;
        Token otherlv_4=null;


        	enterRule();

        try {
            // InternalESAML.g:538:2: ( ( ( ( (lv_accessDirection_0_1= 'provide' | lv_accessDirection_0_2= 'require' ) ) ) otherlv_1= 'data' otherlv_2= 'access' ( (lv_name_3_0= RULE_ID ) ) ( ( ';' )=>otherlv_4= ';' ) ) )
            // InternalESAML.g:539:2: ( ( ( (lv_accessDirection_0_1= 'provide' | lv_accessDirection_0_2= 'require' ) ) ) otherlv_1= 'data' otherlv_2= 'access' ( (lv_name_3_0= RULE_ID ) ) ( ( ';' )=>otherlv_4= ';' ) )
            {
            // InternalESAML.g:539:2: ( ( ( (lv_accessDirection_0_1= 'provide' | lv_accessDirection_0_2= 'require' ) ) ) otherlv_1= 'data' otherlv_2= 'access' ( (lv_name_3_0= RULE_ID ) ) ( ( ';' )=>otherlv_4= ';' ) )
            // InternalESAML.g:540:3: ( ( (lv_accessDirection_0_1= 'provide' | lv_accessDirection_0_2= 'require' ) ) ) otherlv_1= 'data' otherlv_2= 'access' ( (lv_name_3_0= RULE_ID ) ) ( ( ';' )=>otherlv_4= ';' )
            {
            // InternalESAML.g:540:3: ( ( (lv_accessDirection_0_1= 'provide' | lv_accessDirection_0_2= 'require' ) ) )
            // InternalESAML.g:541:4: ( (lv_accessDirection_0_1= 'provide' | lv_accessDirection_0_2= 'require' ) )
            {
            // InternalESAML.g:541:4: ( (lv_accessDirection_0_1= 'provide' | lv_accessDirection_0_2= 'require' ) )
            // InternalESAML.g:542:5: (lv_accessDirection_0_1= 'provide' | lv_accessDirection_0_2= 'require' )
            {
            // InternalESAML.g:542:5: (lv_accessDirection_0_1= 'provide' | lv_accessDirection_0_2= 'require' )
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0==26) ) {
                alt10=1;
            }
            else if ( (LA10_0==27) ) {
                alt10=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 10, 0, input);

                throw nvae;
            }
            switch (alt10) {
                case 1 :
                    // InternalESAML.g:543:6: lv_accessDirection_0_1= 'provide'
                    {
                    lv_accessDirection_0_1=(Token)match(input,26,FOLLOW_10); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_accessDirection_0_1, grammarAccess.getAccessFeatureAccess().getAccessDirectionProvideKeyword_0_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getAccessFeatureRule());
                      						}
                      						setWithLastConsumed(current, "accessDirection", lv_accessDirection_0_1, null);
                      					
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:554:6: lv_accessDirection_0_2= 'require'
                    {
                    lv_accessDirection_0_2=(Token)match(input,27,FOLLOW_10); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_accessDirection_0_2, grammarAccess.getAccessFeatureAccess().getAccessDirectionRequireKeyword_0_0_1());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getAccessFeatureRule());
                      						}
                      						setWithLastConsumed(current, "accessDirection", lv_accessDirection_0_2, null);
                      					
                    }

                    }
                    break;

            }


            }


            }

            otherlv_1=(Token)match(input,25,FOLLOW_11); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getAccessFeatureAccess().getDataKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,28,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getAccessFeatureAccess().getAccessKeyword_2());
              		
            }
            // InternalESAML.g:575:3: ( (lv_name_3_0= RULE_ID ) )
            // InternalESAML.g:576:4: (lv_name_3_0= RULE_ID )
            {
            // InternalESAML.g:576:4: (lv_name_3_0= RULE_ID )
            // InternalESAML.g:577:5: lv_name_3_0= RULE_ID
            {
            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_3_0, grammarAccess.getAccessFeatureAccess().getNameIDTerminalRuleCall_3_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAccessFeatureRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_3_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:593:3: ( ( ';' )=>otherlv_4= ';' )
            // InternalESAML.g:594:4: ( ';' )=>otherlv_4= ';'
            {
            otherlv_4=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_4, grammarAccess.getAccessFeatureAccess().getSemicolonKeyword_4());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAccessFeature"


    // $ANTLR start "entryRuleProperty"
    // InternalESAML.g:604:1: entryRuleProperty returns [EObject current=null] : iv_ruleProperty= ruleProperty EOF ;
    public final EObject entryRuleProperty() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleProperty = null;


        try {
            // InternalESAML.g:604:49: (iv_ruleProperty= ruleProperty EOF )
            // InternalESAML.g:605:2: iv_ruleProperty= ruleProperty EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPropertyRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleProperty=ruleProperty();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleProperty; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleProperty"


    // $ANTLR start "ruleProperty"
    // InternalESAML.g:611:1: ruleProperty returns [EObject current=null] : (this_Period_0= rulePeriod | this_Variable_1= ruleVariable | this_EnumVariable_2= ruleEnumVariable | this_Reference_3= ruleReference | this_ReferenceEnum_4= ruleReferenceEnum ) ;
    public final EObject ruleProperty() throws RecognitionException {
        EObject current = null;

        EObject this_Period_0 = null;

        EObject this_Variable_1 = null;

        EObject this_EnumVariable_2 = null;

        EObject this_Reference_3 = null;

        EObject this_ReferenceEnum_4 = null;



        	enterRule();

        try {
            // InternalESAML.g:617:2: ( (this_Period_0= rulePeriod | this_Variable_1= ruleVariable | this_EnumVariable_2= ruleEnumVariable | this_Reference_3= ruleReference | this_ReferenceEnum_4= ruleReferenceEnum ) )
            // InternalESAML.g:618:2: (this_Period_0= rulePeriod | this_Variable_1= ruleVariable | this_EnumVariable_2= ruleEnumVariable | this_Reference_3= ruleReference | this_ReferenceEnum_4= ruleReferenceEnum )
            {
            // InternalESAML.g:618:2: (this_Period_0= rulePeriod | this_Variable_1= ruleVariable | this_EnumVariable_2= ruleEnumVariable | this_Reference_3= ruleReference | this_ReferenceEnum_4= ruleReferenceEnum )
            int alt11=5;
            alt11 = dfa11.predict(input);
            switch (alt11) {
                case 1 :
                    // InternalESAML.g:619:3: this_Period_0= rulePeriod
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getPropertyAccess().getPeriodParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_Period_0=rulePeriod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_Period_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:628:3: this_Variable_1= ruleVariable
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getPropertyAccess().getVariableParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_Variable_1=ruleVariable();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_Variable_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:637:3: this_EnumVariable_2= ruleEnumVariable
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getPropertyAccess().getEnumVariableParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_EnumVariable_2=ruleEnumVariable();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_EnumVariable_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalESAML.g:646:3: this_Reference_3= ruleReference
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getPropertyAccess().getReferenceParserRuleCall_3());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_Reference_3=ruleReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_Reference_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalESAML.g:655:3: this_ReferenceEnum_4= ruleReferenceEnum
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getPropertyAccess().getReferenceEnumParserRuleCall_4());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_ReferenceEnum_4=ruleReferenceEnum();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_ReferenceEnum_4;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleProperty"


    // $ANTLR start "entryRulePeriod"
    // InternalESAML.g:667:1: entryRulePeriod returns [EObject current=null] : iv_rulePeriod= rulePeriod EOF ;
    public final EObject entryRulePeriod() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePeriod = null;


        try {
            // InternalESAML.g:667:47: (iv_rulePeriod= rulePeriod EOF )
            // InternalESAML.g:668:2: iv_rulePeriod= rulePeriod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPeriodRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_rulePeriod=rulePeriod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePeriod; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePeriod"


    // $ANTLR start "rulePeriod"
    // InternalESAML.g:674:1: rulePeriod returns [EObject current=null] : (otherlv_0= 'period' ( (lv_period_1_0= ruleNumericValue ) ) otherlv_2= 'ms' ( ( ';' )=>otherlv_3= ';' ) ) ;
    public final EObject rulePeriod() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        AntlrDatatypeRuleToken lv_period_1_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:680:2: ( (otherlv_0= 'period' ( (lv_period_1_0= ruleNumericValue ) ) otherlv_2= 'ms' ( ( ';' )=>otherlv_3= ';' ) ) )
            // InternalESAML.g:681:2: (otherlv_0= 'period' ( (lv_period_1_0= ruleNumericValue ) ) otherlv_2= 'ms' ( ( ';' )=>otherlv_3= ';' ) )
            {
            // InternalESAML.g:681:2: (otherlv_0= 'period' ( (lv_period_1_0= ruleNumericValue ) ) otherlv_2= 'ms' ( ( ';' )=>otherlv_3= ';' ) )
            // InternalESAML.g:682:3: otherlv_0= 'period' ( (lv_period_1_0= ruleNumericValue ) ) otherlv_2= 'ms' ( ( ';' )=>otherlv_3= ';' )
            {
            otherlv_0=(Token)match(input,29,FOLLOW_12); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getPeriodAccess().getPeriodKeyword_0());
              		
            }
            // InternalESAML.g:686:3: ( (lv_period_1_0= ruleNumericValue ) )
            // InternalESAML.g:687:4: (lv_period_1_0= ruleNumericValue )
            {
            // InternalESAML.g:687:4: (lv_period_1_0= ruleNumericValue )
            // InternalESAML.g:688:5: lv_period_1_0= ruleNumericValue
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getPeriodAccess().getPeriodNumericValueParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_13);
            lv_period_1_0=ruleNumericValue();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getPeriodRule());
              					}
              					set(
              						current,
              						"period",
              						lv_period_1_0,
              						"com.peppa.xtext.esaml.ESAML.NumericValue");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_2=(Token)match(input,30,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getPeriodAccess().getMsKeyword_2());
              		
            }
            // InternalESAML.g:709:3: ( ( ';' )=>otherlv_3= ';' )
            // InternalESAML.g:710:4: ( ';' )=>otherlv_3= ';'
            {
            otherlv_3=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_3, grammarAccess.getPeriodAccess().getSemicolonKeyword_3());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePeriod"


    // $ANTLR start "entryRuleVariable"
    // InternalESAML.g:720:1: entryRuleVariable returns [EObject current=null] : iv_ruleVariable= ruleVariable EOF ;
    public final EObject entryRuleVariable() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleVariable = null;


        try {
            // InternalESAML.g:720:49: (iv_ruleVariable= ruleVariable EOF )
            // InternalESAML.g:721:2: iv_ruleVariable= ruleVariable EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getVariableRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleVariable=ruleVariable();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleVariable; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleVariable"


    // $ANTLR start "ruleVariable"
    // InternalESAML.g:727:1: ruleVariable returns [EObject current=null] : ( ( (lv_isStateVal_0_0= 'stateval' ) )? ( (lv_variableType_1_0= ruleVariableType ) ) ( (lv_name_2_0= RULE_ID ) ) ( ( ';' )=>otherlv_3= ';' ) ) ;
    public final EObject ruleVariable() throws RecognitionException {
        EObject current = null;

        Token lv_isStateVal_0_0=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        EObject lv_variableType_1_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:733:2: ( ( ( (lv_isStateVal_0_0= 'stateval' ) )? ( (lv_variableType_1_0= ruleVariableType ) ) ( (lv_name_2_0= RULE_ID ) ) ( ( ';' )=>otherlv_3= ';' ) ) )
            // InternalESAML.g:734:2: ( ( (lv_isStateVal_0_0= 'stateval' ) )? ( (lv_variableType_1_0= ruleVariableType ) ) ( (lv_name_2_0= RULE_ID ) ) ( ( ';' )=>otherlv_3= ';' ) )
            {
            // InternalESAML.g:734:2: ( ( (lv_isStateVal_0_0= 'stateval' ) )? ( (lv_variableType_1_0= ruleVariableType ) ) ( (lv_name_2_0= RULE_ID ) ) ( ( ';' )=>otherlv_3= ';' ) )
            // InternalESAML.g:735:3: ( (lv_isStateVal_0_0= 'stateval' ) )? ( (lv_variableType_1_0= ruleVariableType ) ) ( (lv_name_2_0= RULE_ID ) ) ( ( ';' )=>otherlv_3= ';' )
            {
            // InternalESAML.g:735:3: ( (lv_isStateVal_0_0= 'stateval' ) )?
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==31) ) {
                alt12=1;
            }
            switch (alt12) {
                case 1 :
                    // InternalESAML.g:736:4: (lv_isStateVal_0_0= 'stateval' )
                    {
                    // InternalESAML.g:736:4: (lv_isStateVal_0_0= 'stateval' )
                    // InternalESAML.g:737:5: lv_isStateVal_0_0= 'stateval'
                    {
                    lv_isStateVal_0_0=(Token)match(input,31,FOLLOW_14); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_isStateVal_0_0, grammarAccess.getVariableAccess().getIsStateValStatevalKeyword_0_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getVariableRule());
                      					}
                      					setWithLastConsumed(current, "isStateVal", lv_isStateVal_0_0 != null, "stateval");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalESAML.g:749:3: ( (lv_variableType_1_0= ruleVariableType ) )
            // InternalESAML.g:750:4: (lv_variableType_1_0= ruleVariableType )
            {
            // InternalESAML.g:750:4: (lv_variableType_1_0= ruleVariableType )
            // InternalESAML.g:751:5: lv_variableType_1_0= ruleVariableType
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getVariableAccess().getVariableTypeVariableTypeParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_8);
            lv_variableType_1_0=ruleVariableType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getVariableRule());
              					}
              					set(
              						current,
              						"variableType",
              						lv_variableType_1_0,
              						"com.peppa.xtext.esaml.ESAML.VariableType");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalESAML.g:768:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalESAML.g:769:4: (lv_name_2_0= RULE_ID )
            {
            // InternalESAML.g:769:4: (lv_name_2_0= RULE_ID )
            // InternalESAML.g:770:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_2_0, grammarAccess.getVariableAccess().getNameIDTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getVariableRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_2_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:786:3: ( ( ';' )=>otherlv_3= ';' )
            // InternalESAML.g:787:4: ( ';' )=>otherlv_3= ';'
            {
            otherlv_3=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_3, grammarAccess.getVariableAccess().getSemicolonKeyword_3());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleVariable"


    // $ANTLR start "entryRuleEnumVariable"
    // InternalESAML.g:797:1: entryRuleEnumVariable returns [EObject current=null] : iv_ruleEnumVariable= ruleEnumVariable EOF ;
    public final EObject entryRuleEnumVariable() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEnumVariable = null;


        try {
            // InternalESAML.g:797:53: (iv_ruleEnumVariable= ruleEnumVariable EOF )
            // InternalESAML.g:798:2: iv_ruleEnumVariable= ruleEnumVariable EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getEnumVariableRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleEnumVariable=ruleEnumVariable();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleEnumVariable; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEnumVariable"


    // $ANTLR start "ruleEnumVariable"
    // InternalESAML.g:804:1: ruleEnumVariable returns [EObject current=null] : ( ( (lv_isStateVal_0_0= 'stateval' ) )? otherlv_1= 'enum' ( (otherlv_2= RULE_ID ) ) ( (lv_name_3_0= RULE_ID ) ) ( ( ';' )=>otherlv_4= ';' ) ) ;
    public final EObject ruleEnumVariable() throws RecognitionException {
        EObject current = null;

        Token lv_isStateVal_0_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token lv_name_3_0=null;
        Token otherlv_4=null;


        	enterRule();

        try {
            // InternalESAML.g:810:2: ( ( ( (lv_isStateVal_0_0= 'stateval' ) )? otherlv_1= 'enum' ( (otherlv_2= RULE_ID ) ) ( (lv_name_3_0= RULE_ID ) ) ( ( ';' )=>otherlv_4= ';' ) ) )
            // InternalESAML.g:811:2: ( ( (lv_isStateVal_0_0= 'stateval' ) )? otherlv_1= 'enum' ( (otherlv_2= RULE_ID ) ) ( (lv_name_3_0= RULE_ID ) ) ( ( ';' )=>otherlv_4= ';' ) )
            {
            // InternalESAML.g:811:2: ( ( (lv_isStateVal_0_0= 'stateval' ) )? otherlv_1= 'enum' ( (otherlv_2= RULE_ID ) ) ( (lv_name_3_0= RULE_ID ) ) ( ( ';' )=>otherlv_4= ';' ) )
            // InternalESAML.g:812:3: ( (lv_isStateVal_0_0= 'stateval' ) )? otherlv_1= 'enum' ( (otherlv_2= RULE_ID ) ) ( (lv_name_3_0= RULE_ID ) ) ( ( ';' )=>otherlv_4= ';' )
            {
            // InternalESAML.g:812:3: ( (lv_isStateVal_0_0= 'stateval' ) )?
            int alt13=2;
            int LA13_0 = input.LA(1);

            if ( (LA13_0==31) ) {
                alt13=1;
            }
            switch (alt13) {
                case 1 :
                    // InternalESAML.g:813:4: (lv_isStateVal_0_0= 'stateval' )
                    {
                    // InternalESAML.g:813:4: (lv_isStateVal_0_0= 'stateval' )
                    // InternalESAML.g:814:5: lv_isStateVal_0_0= 'stateval'
                    {
                    lv_isStateVal_0_0=(Token)match(input,31,FOLLOW_15); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_isStateVal_0_0, grammarAccess.getEnumVariableAccess().getIsStateValStatevalKeyword_0_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getEnumVariableRule());
                      					}
                      					setWithLastConsumed(current, "isStateVal", lv_isStateVal_0_0 != null, "stateval");
                      				
                    }

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,32,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getEnumVariableAccess().getEnumKeyword_1());
              		
            }
            // InternalESAML.g:830:3: ( (otherlv_2= RULE_ID ) )
            // InternalESAML.g:831:4: (otherlv_2= RULE_ID )
            {
            // InternalESAML.g:831:4: (otherlv_2= RULE_ID )
            // InternalESAML.g:832:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getEnumVariableRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getEnumVariableAccess().getEnumTypeEnumTypeCrossReference_2_0());
              				
            }

            }


            }

            // InternalESAML.g:843:3: ( (lv_name_3_0= RULE_ID ) )
            // InternalESAML.g:844:4: (lv_name_3_0= RULE_ID )
            {
            // InternalESAML.g:844:4: (lv_name_3_0= RULE_ID )
            // InternalESAML.g:845:5: lv_name_3_0= RULE_ID
            {
            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_3_0, grammarAccess.getEnumVariableAccess().getNameIDTerminalRuleCall_3_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getEnumVariableRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_3_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:861:3: ( ( ';' )=>otherlv_4= ';' )
            // InternalESAML.g:862:4: ( ';' )=>otherlv_4= ';'
            {
            otherlv_4=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_4, grammarAccess.getEnumVariableAccess().getSemicolonKeyword_4());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEnumVariable"


    // $ANTLR start "entryRuleReference"
    // InternalESAML.g:872:1: entryRuleReference returns [EObject current=null] : iv_ruleReference= ruleReference EOF ;
    public final EObject entryRuleReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleReference = null;


        try {
            // InternalESAML.g:872:50: (iv_ruleReference= ruleReference EOF )
            // InternalESAML.g:873:2: iv_ruleReference= ruleReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getReferenceRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleReference=ruleReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleReference; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleReference"


    // $ANTLR start "ruleReference"
    // InternalESAML.g:879:1: ruleReference returns [EObject current=null] : ( ( (lv_refVariableType_0_0= ruleVariableType ) ) otherlv_1= '&' ( (lv_refName_2_0= RULE_ID ) ) (otherlv_3= ',' otherlv_4= '&' ( (lv_refName_5_0= RULE_ID ) ) )* otherlv_6= '->' ( ( (lv_refKeyWord_7_1= 'system' | lv_refKeyWord_7_2= 'subsystem' | lv_refKeyWord_7_3= 'activity' ) ) ) ( (otherlv_8= RULE_ID ) ) ( (otherlv_9= RULE_ID ) ) ( ( ';' )=>otherlv_10= ';' ) ) ;
    public final EObject ruleReference() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_refName_2_0=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token lv_refName_5_0=null;
        Token otherlv_6=null;
        Token lv_refKeyWord_7_1=null;
        Token lv_refKeyWord_7_2=null;
        Token lv_refKeyWord_7_3=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        EObject lv_refVariableType_0_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:885:2: ( ( ( (lv_refVariableType_0_0= ruleVariableType ) ) otherlv_1= '&' ( (lv_refName_2_0= RULE_ID ) ) (otherlv_3= ',' otherlv_4= '&' ( (lv_refName_5_0= RULE_ID ) ) )* otherlv_6= '->' ( ( (lv_refKeyWord_7_1= 'system' | lv_refKeyWord_7_2= 'subsystem' | lv_refKeyWord_7_3= 'activity' ) ) ) ( (otherlv_8= RULE_ID ) ) ( (otherlv_9= RULE_ID ) ) ( ( ';' )=>otherlv_10= ';' ) ) )
            // InternalESAML.g:886:2: ( ( (lv_refVariableType_0_0= ruleVariableType ) ) otherlv_1= '&' ( (lv_refName_2_0= RULE_ID ) ) (otherlv_3= ',' otherlv_4= '&' ( (lv_refName_5_0= RULE_ID ) ) )* otherlv_6= '->' ( ( (lv_refKeyWord_7_1= 'system' | lv_refKeyWord_7_2= 'subsystem' | lv_refKeyWord_7_3= 'activity' ) ) ) ( (otherlv_8= RULE_ID ) ) ( (otherlv_9= RULE_ID ) ) ( ( ';' )=>otherlv_10= ';' ) )
            {
            // InternalESAML.g:886:2: ( ( (lv_refVariableType_0_0= ruleVariableType ) ) otherlv_1= '&' ( (lv_refName_2_0= RULE_ID ) ) (otherlv_3= ',' otherlv_4= '&' ( (lv_refName_5_0= RULE_ID ) ) )* otherlv_6= '->' ( ( (lv_refKeyWord_7_1= 'system' | lv_refKeyWord_7_2= 'subsystem' | lv_refKeyWord_7_3= 'activity' ) ) ) ( (otherlv_8= RULE_ID ) ) ( (otherlv_9= RULE_ID ) ) ( ( ';' )=>otherlv_10= ';' ) )
            // InternalESAML.g:887:3: ( (lv_refVariableType_0_0= ruleVariableType ) ) otherlv_1= '&' ( (lv_refName_2_0= RULE_ID ) ) (otherlv_3= ',' otherlv_4= '&' ( (lv_refName_5_0= RULE_ID ) ) )* otherlv_6= '->' ( ( (lv_refKeyWord_7_1= 'system' | lv_refKeyWord_7_2= 'subsystem' | lv_refKeyWord_7_3= 'activity' ) ) ) ( (otherlv_8= RULE_ID ) ) ( (otherlv_9= RULE_ID ) ) ( ( ';' )=>otherlv_10= ';' )
            {
            // InternalESAML.g:887:3: ( (lv_refVariableType_0_0= ruleVariableType ) )
            // InternalESAML.g:888:4: (lv_refVariableType_0_0= ruleVariableType )
            {
            // InternalESAML.g:888:4: (lv_refVariableType_0_0= ruleVariableType )
            // InternalESAML.g:889:5: lv_refVariableType_0_0= ruleVariableType
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getReferenceAccess().getRefVariableTypeVariableTypeParserRuleCall_0_0());
              				
            }
            pushFollow(FOLLOW_16);
            lv_refVariableType_0_0=ruleVariableType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getReferenceRule());
              					}
              					set(
              						current,
              						"refVariableType",
              						lv_refVariableType_0_0,
              						"com.peppa.xtext.esaml.ESAML.VariableType");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_1=(Token)match(input,33,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getReferenceAccess().getAmpersandKeyword_1());
              		
            }
            // InternalESAML.g:910:3: ( (lv_refName_2_0= RULE_ID ) )
            // InternalESAML.g:911:4: (lv_refName_2_0= RULE_ID )
            {
            // InternalESAML.g:911:4: (lv_refName_2_0= RULE_ID )
            // InternalESAML.g:912:5: lv_refName_2_0= RULE_ID
            {
            lv_refName_2_0=(Token)match(input,RULE_ID,FOLLOW_17); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_refName_2_0, grammarAccess.getReferenceAccess().getRefNameIDTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getReferenceRule());
              					}
              					addWithLastConsumed(
              						current,
              						"refName",
              						lv_refName_2_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:928:3: (otherlv_3= ',' otherlv_4= '&' ( (lv_refName_5_0= RULE_ID ) ) )*
            loop14:
            do {
                int alt14=2;
                int LA14_0 = input.LA(1);

                if ( (LA14_0==34) ) {
                    alt14=1;
                }


                switch (alt14) {
            	case 1 :
            	    // InternalESAML.g:929:4: otherlv_3= ',' otherlv_4= '&' ( (lv_refName_5_0= RULE_ID ) )
            	    {
            	    otherlv_3=(Token)match(input,34,FOLLOW_16); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_3, grammarAccess.getReferenceAccess().getCommaKeyword_3_0());
            	      			
            	    }
            	    otherlv_4=(Token)match(input,33,FOLLOW_8); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_4, grammarAccess.getReferenceAccess().getAmpersandKeyword_3_1());
            	      			
            	    }
            	    // InternalESAML.g:937:4: ( (lv_refName_5_0= RULE_ID ) )
            	    // InternalESAML.g:938:5: (lv_refName_5_0= RULE_ID )
            	    {
            	    // InternalESAML.g:938:5: (lv_refName_5_0= RULE_ID )
            	    // InternalESAML.g:939:6: lv_refName_5_0= RULE_ID
            	    {
            	    lv_refName_5_0=(Token)match(input,RULE_ID,FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						newLeafNode(lv_refName_5_0, grammarAccess.getReferenceAccess().getRefNameIDTerminalRuleCall_3_2_0());
            	      					
            	    }
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElement(grammarAccess.getReferenceRule());
            	      						}
            	      						addWithLastConsumed(
            	      							current,
            	      							"refName",
            	      							lv_refName_5_0,
            	      							"org.eclipse.xtext.common.Terminals.ID");
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop14;
                }
            } while (true);

            otherlv_6=(Token)match(input,35,FOLLOW_18); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getReferenceAccess().getHyphenMinusGreaterThanSignKeyword_4());
              		
            }
            // InternalESAML.g:960:3: ( ( (lv_refKeyWord_7_1= 'system' | lv_refKeyWord_7_2= 'subsystem' | lv_refKeyWord_7_3= 'activity' ) ) )
            // InternalESAML.g:961:4: ( (lv_refKeyWord_7_1= 'system' | lv_refKeyWord_7_2= 'subsystem' | lv_refKeyWord_7_3= 'activity' ) )
            {
            // InternalESAML.g:961:4: ( (lv_refKeyWord_7_1= 'system' | lv_refKeyWord_7_2= 'subsystem' | lv_refKeyWord_7_3= 'activity' ) )
            // InternalESAML.g:962:5: (lv_refKeyWord_7_1= 'system' | lv_refKeyWord_7_2= 'subsystem' | lv_refKeyWord_7_3= 'activity' )
            {
            // InternalESAML.g:962:5: (lv_refKeyWord_7_1= 'system' | lv_refKeyWord_7_2= 'subsystem' | lv_refKeyWord_7_3= 'activity' )
            int alt15=3;
            switch ( input.LA(1) ) {
            case 36:
                {
                alt15=1;
                }
                break;
            case 37:
                {
                alt15=2;
                }
                break;
            case 38:
                {
                alt15=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 15, 0, input);

                throw nvae;
            }

            switch (alt15) {
                case 1 :
                    // InternalESAML.g:963:6: lv_refKeyWord_7_1= 'system'
                    {
                    lv_refKeyWord_7_1=(Token)match(input,36,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_refKeyWord_7_1, grammarAccess.getReferenceAccess().getRefKeyWordSystemKeyword_5_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getReferenceRule());
                      						}
                      						setWithLastConsumed(current, "refKeyWord", lv_refKeyWord_7_1, null);
                      					
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:974:6: lv_refKeyWord_7_2= 'subsystem'
                    {
                    lv_refKeyWord_7_2=(Token)match(input,37,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_refKeyWord_7_2, grammarAccess.getReferenceAccess().getRefKeyWordSubsystemKeyword_5_0_1());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getReferenceRule());
                      						}
                      						setWithLastConsumed(current, "refKeyWord", lv_refKeyWord_7_2, null);
                      					
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:985:6: lv_refKeyWord_7_3= 'activity'
                    {
                    lv_refKeyWord_7_3=(Token)match(input,38,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_refKeyWord_7_3, grammarAccess.getReferenceAccess().getRefKeyWordActivityKeyword_5_0_2());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getReferenceRule());
                      						}
                      						setWithLastConsumed(current, "refKeyWord", lv_refKeyWord_7_3, null);
                      					
                    }

                    }
                    break;

            }


            }


            }

            // InternalESAML.g:998:3: ( (otherlv_8= RULE_ID ) )
            // InternalESAML.g:999:4: (otherlv_8= RULE_ID )
            {
            // InternalESAML.g:999:4: (otherlv_8= RULE_ID )
            // InternalESAML.g:1000:5: otherlv_8= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getReferenceRule());
              					}
              				
            }
            otherlv_8=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_8, grammarAccess.getReferenceAccess().getRefComponentTypeRefComponentCrossReference_6_0());
              				
            }

            }


            }

            // InternalESAML.g:1011:3: ( (otherlv_9= RULE_ID ) )
            // InternalESAML.g:1012:4: (otherlv_9= RULE_ID )
            {
            // InternalESAML.g:1012:4: (otherlv_9= RULE_ID )
            // InternalESAML.g:1013:5: otherlv_9= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getReferenceRule());
              					}
              				
            }
            otherlv_9=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_9, grammarAccess.getReferenceAccess().getRefVariableVariableCrossReference_7_0());
              				
            }

            }


            }

            // InternalESAML.g:1024:3: ( ( ';' )=>otherlv_10= ';' )
            // InternalESAML.g:1025:4: ( ';' )=>otherlv_10= ';'
            {
            otherlv_10=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_10, grammarAccess.getReferenceAccess().getSemicolonKeyword_8());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleReference"


    // $ANTLR start "entryRuleReferenceEnum"
    // InternalESAML.g:1035:1: entryRuleReferenceEnum returns [EObject current=null] : iv_ruleReferenceEnum= ruleReferenceEnum EOF ;
    public final EObject entryRuleReferenceEnum() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleReferenceEnum = null;


        try {
            // InternalESAML.g:1035:54: (iv_ruleReferenceEnum= ruleReferenceEnum EOF )
            // InternalESAML.g:1036:2: iv_ruleReferenceEnum= ruleReferenceEnum EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getReferenceEnumRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleReferenceEnum=ruleReferenceEnum();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleReferenceEnum; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleReferenceEnum"


    // $ANTLR start "ruleReferenceEnum"
    // InternalESAML.g:1042:1: ruleReferenceEnum returns [EObject current=null] : (otherlv_0= 'enum' ( (otherlv_1= RULE_ID ) ) otherlv_2= '&' ( (lv_refName_3_0= RULE_ID ) ) (otherlv_4= ',' otherlv_5= '&' ( (lv_refName_6_0= RULE_ID ) ) )* otherlv_7= '->' ( ( (lv_refKeyWord_8_1= 'system' | lv_refKeyWord_8_2= 'subsystem' | lv_refKeyWord_8_3= 'activity' ) ) ) ( (otherlv_9= RULE_ID ) ) ( (otherlv_10= RULE_ID ) ) ( ( ';' )=>otherlv_11= ';' ) ) ;
    public final EObject ruleReferenceEnum() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token lv_refName_3_0=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token lv_refName_6_0=null;
        Token otherlv_7=null;
        Token lv_refKeyWord_8_1=null;
        Token lv_refKeyWord_8_2=null;
        Token lv_refKeyWord_8_3=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;


        	enterRule();

        try {
            // InternalESAML.g:1048:2: ( (otherlv_0= 'enum' ( (otherlv_1= RULE_ID ) ) otherlv_2= '&' ( (lv_refName_3_0= RULE_ID ) ) (otherlv_4= ',' otherlv_5= '&' ( (lv_refName_6_0= RULE_ID ) ) )* otherlv_7= '->' ( ( (lv_refKeyWord_8_1= 'system' | lv_refKeyWord_8_2= 'subsystem' | lv_refKeyWord_8_3= 'activity' ) ) ) ( (otherlv_9= RULE_ID ) ) ( (otherlv_10= RULE_ID ) ) ( ( ';' )=>otherlv_11= ';' ) ) )
            // InternalESAML.g:1049:2: (otherlv_0= 'enum' ( (otherlv_1= RULE_ID ) ) otherlv_2= '&' ( (lv_refName_3_0= RULE_ID ) ) (otherlv_4= ',' otherlv_5= '&' ( (lv_refName_6_0= RULE_ID ) ) )* otherlv_7= '->' ( ( (lv_refKeyWord_8_1= 'system' | lv_refKeyWord_8_2= 'subsystem' | lv_refKeyWord_8_3= 'activity' ) ) ) ( (otherlv_9= RULE_ID ) ) ( (otherlv_10= RULE_ID ) ) ( ( ';' )=>otherlv_11= ';' ) )
            {
            // InternalESAML.g:1049:2: (otherlv_0= 'enum' ( (otherlv_1= RULE_ID ) ) otherlv_2= '&' ( (lv_refName_3_0= RULE_ID ) ) (otherlv_4= ',' otherlv_5= '&' ( (lv_refName_6_0= RULE_ID ) ) )* otherlv_7= '->' ( ( (lv_refKeyWord_8_1= 'system' | lv_refKeyWord_8_2= 'subsystem' | lv_refKeyWord_8_3= 'activity' ) ) ) ( (otherlv_9= RULE_ID ) ) ( (otherlv_10= RULE_ID ) ) ( ( ';' )=>otherlv_11= ';' ) )
            // InternalESAML.g:1050:3: otherlv_0= 'enum' ( (otherlv_1= RULE_ID ) ) otherlv_2= '&' ( (lv_refName_3_0= RULE_ID ) ) (otherlv_4= ',' otherlv_5= '&' ( (lv_refName_6_0= RULE_ID ) ) )* otherlv_7= '->' ( ( (lv_refKeyWord_8_1= 'system' | lv_refKeyWord_8_2= 'subsystem' | lv_refKeyWord_8_3= 'activity' ) ) ) ( (otherlv_9= RULE_ID ) ) ( (otherlv_10= RULE_ID ) ) ( ( ';' )=>otherlv_11= ';' )
            {
            otherlv_0=(Token)match(input,32,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getReferenceEnumAccess().getEnumKeyword_0());
              		
            }
            // InternalESAML.g:1054:3: ( (otherlv_1= RULE_ID ) )
            // InternalESAML.g:1055:4: (otherlv_1= RULE_ID )
            {
            // InternalESAML.g:1055:4: (otherlv_1= RULE_ID )
            // InternalESAML.g:1056:5: otherlv_1= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getReferenceEnumRule());
              					}
              				
            }
            otherlv_1=(Token)match(input,RULE_ID,FOLLOW_16); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_1, grammarAccess.getReferenceEnumAccess().getRefEnumTypeEnumTypeCrossReference_1_0());
              				
            }

            }


            }

            otherlv_2=(Token)match(input,33,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getReferenceEnumAccess().getAmpersandKeyword_2());
              		
            }
            // InternalESAML.g:1071:3: ( (lv_refName_3_0= RULE_ID ) )
            // InternalESAML.g:1072:4: (lv_refName_3_0= RULE_ID )
            {
            // InternalESAML.g:1072:4: (lv_refName_3_0= RULE_ID )
            // InternalESAML.g:1073:5: lv_refName_3_0= RULE_ID
            {
            lv_refName_3_0=(Token)match(input,RULE_ID,FOLLOW_17); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_refName_3_0, grammarAccess.getReferenceEnumAccess().getRefNameIDTerminalRuleCall_3_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getReferenceEnumRule());
              					}
              					addWithLastConsumed(
              						current,
              						"refName",
              						lv_refName_3_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:1089:3: (otherlv_4= ',' otherlv_5= '&' ( (lv_refName_6_0= RULE_ID ) ) )*
            loop16:
            do {
                int alt16=2;
                int LA16_0 = input.LA(1);

                if ( (LA16_0==34) ) {
                    alt16=1;
                }


                switch (alt16) {
            	case 1 :
            	    // InternalESAML.g:1090:4: otherlv_4= ',' otherlv_5= '&' ( (lv_refName_6_0= RULE_ID ) )
            	    {
            	    otherlv_4=(Token)match(input,34,FOLLOW_16); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_4, grammarAccess.getReferenceEnumAccess().getCommaKeyword_4_0());
            	      			
            	    }
            	    otherlv_5=(Token)match(input,33,FOLLOW_8); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_5, grammarAccess.getReferenceEnumAccess().getAmpersandKeyword_4_1());
            	      			
            	    }
            	    // InternalESAML.g:1098:4: ( (lv_refName_6_0= RULE_ID ) )
            	    // InternalESAML.g:1099:5: (lv_refName_6_0= RULE_ID )
            	    {
            	    // InternalESAML.g:1099:5: (lv_refName_6_0= RULE_ID )
            	    // InternalESAML.g:1100:6: lv_refName_6_0= RULE_ID
            	    {
            	    lv_refName_6_0=(Token)match(input,RULE_ID,FOLLOW_17); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						newLeafNode(lv_refName_6_0, grammarAccess.getReferenceEnumAccess().getRefNameIDTerminalRuleCall_4_2_0());
            	      					
            	    }
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElement(grammarAccess.getReferenceEnumRule());
            	      						}
            	      						addWithLastConsumed(
            	      							current,
            	      							"refName",
            	      							lv_refName_6_0,
            	      							"org.eclipse.xtext.common.Terminals.ID");
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop16;
                }
            } while (true);

            otherlv_7=(Token)match(input,35,FOLLOW_18); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_7, grammarAccess.getReferenceEnumAccess().getHyphenMinusGreaterThanSignKeyword_5());
              		
            }
            // InternalESAML.g:1121:3: ( ( (lv_refKeyWord_8_1= 'system' | lv_refKeyWord_8_2= 'subsystem' | lv_refKeyWord_8_3= 'activity' ) ) )
            // InternalESAML.g:1122:4: ( (lv_refKeyWord_8_1= 'system' | lv_refKeyWord_8_2= 'subsystem' | lv_refKeyWord_8_3= 'activity' ) )
            {
            // InternalESAML.g:1122:4: ( (lv_refKeyWord_8_1= 'system' | lv_refKeyWord_8_2= 'subsystem' | lv_refKeyWord_8_3= 'activity' ) )
            // InternalESAML.g:1123:5: (lv_refKeyWord_8_1= 'system' | lv_refKeyWord_8_2= 'subsystem' | lv_refKeyWord_8_3= 'activity' )
            {
            // InternalESAML.g:1123:5: (lv_refKeyWord_8_1= 'system' | lv_refKeyWord_8_2= 'subsystem' | lv_refKeyWord_8_3= 'activity' )
            int alt17=3;
            switch ( input.LA(1) ) {
            case 36:
                {
                alt17=1;
                }
                break;
            case 37:
                {
                alt17=2;
                }
                break;
            case 38:
                {
                alt17=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 17, 0, input);

                throw nvae;
            }

            switch (alt17) {
                case 1 :
                    // InternalESAML.g:1124:6: lv_refKeyWord_8_1= 'system'
                    {
                    lv_refKeyWord_8_1=(Token)match(input,36,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_refKeyWord_8_1, grammarAccess.getReferenceEnumAccess().getRefKeyWordSystemKeyword_6_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getReferenceEnumRule());
                      						}
                      						setWithLastConsumed(current, "refKeyWord", lv_refKeyWord_8_1, null);
                      					
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:1135:6: lv_refKeyWord_8_2= 'subsystem'
                    {
                    lv_refKeyWord_8_2=(Token)match(input,37,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_refKeyWord_8_2, grammarAccess.getReferenceEnumAccess().getRefKeyWordSubsystemKeyword_6_0_1());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getReferenceEnumRule());
                      						}
                      						setWithLastConsumed(current, "refKeyWord", lv_refKeyWord_8_2, null);
                      					
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:1146:6: lv_refKeyWord_8_3= 'activity'
                    {
                    lv_refKeyWord_8_3=(Token)match(input,38,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_refKeyWord_8_3, grammarAccess.getReferenceEnumAccess().getRefKeyWordActivityKeyword_6_0_2());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getReferenceEnumRule());
                      						}
                      						setWithLastConsumed(current, "refKeyWord", lv_refKeyWord_8_3, null);
                      					
                    }

                    }
                    break;

            }


            }


            }

            // InternalESAML.g:1159:3: ( (otherlv_9= RULE_ID ) )
            // InternalESAML.g:1160:4: (otherlv_9= RULE_ID )
            {
            // InternalESAML.g:1160:4: (otherlv_9= RULE_ID )
            // InternalESAML.g:1161:5: otherlv_9= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getReferenceEnumRule());
              					}
              				
            }
            otherlv_9=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_9, grammarAccess.getReferenceEnumAccess().getRefComponentTypeRefComponentCrossReference_7_0());
              				
            }

            }


            }

            // InternalESAML.g:1172:3: ( (otherlv_10= RULE_ID ) )
            // InternalESAML.g:1173:4: (otherlv_10= RULE_ID )
            {
            // InternalESAML.g:1173:4: (otherlv_10= RULE_ID )
            // InternalESAML.g:1174:5: otherlv_10= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getReferenceEnumRule());
              					}
              				
            }
            otherlv_10=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_10, grammarAccess.getReferenceEnumAccess().getRefEnumVariableEnumVariableCrossReference_8_0());
              				
            }

            }


            }

            // InternalESAML.g:1185:3: ( ( ';' )=>otherlv_11= ';' )
            // InternalESAML.g:1186:4: ( ';' )=>otherlv_11= ';'
            {
            otherlv_11=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_11, grammarAccess.getReferenceEnumAccess().getSemicolonKeyword_9());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleReferenceEnum"


    // $ANTLR start "entryRuleSystemType"
    // InternalESAML.g:1196:1: entryRuleSystemType returns [EObject current=null] : iv_ruleSystemType= ruleSystemType EOF ;
    public final EObject entryRuleSystemType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSystemType = null;


        try {
            // InternalESAML.g:1196:51: (iv_ruleSystemType= ruleSystemType EOF )
            // InternalESAML.g:1197:2: iv_ruleSystemType= ruleSystemType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSystemTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSystemType=ruleSystemType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSystemType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSystemType"


    // $ANTLR start "ruleSystemType"
    // InternalESAML.g:1203:1: ruleSystemType returns [EObject current=null] : (otherlv_0= 'system' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) ) ;
    public final EObject ruleSystemType() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_features_3_0 = null;

        EObject lv_properties_5_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:1209:2: ( (otherlv_0= 'system' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) ) )
            // InternalESAML.g:1210:2: (otherlv_0= 'system' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) )
            {
            // InternalESAML.g:1210:2: (otherlv_0= 'system' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) )
            // InternalESAML.g:1211:3: otherlv_0= 'system' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' )
            {
            otherlv_0=(Token)match(input,36,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getSystemTypeAccess().getSystemKeyword_0());
              		
            }
            // InternalESAML.g:1215:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalESAML.g:1216:4: (lv_name_1_0= RULE_ID )
            {
            // InternalESAML.g:1216:4: (lv_name_1_0= RULE_ID )
            // InternalESAML.g:1217:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_19); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getSystemTypeAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSystemTypeRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:1233:3: (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )?
            int alt19=2;
            int LA19_0 = input.LA(1);

            if ( (LA19_0==39) ) {
                alt19=1;
            }
            switch (alt19) {
                case 1 :
                    // InternalESAML.g:1234:4: otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+
                    {
                    otherlv_2=(Token)match(input,39,FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getSystemTypeAccess().getFeaturesKeyword_2_0());
                      			
                    }
                    // InternalESAML.g:1238:4: ( (lv_features_3_0= ruleFeature ) )+
                    int cnt18=0;
                    loop18:
                    do {
                        int alt18=2;
                        int LA18_0 = input.LA(1);

                        if ( ((LA18_0>=16 && LA18_0<=20)||(LA18_0>=26 && LA18_0<=27)) ) {
                            alt18=1;
                        }


                        switch (alt18) {
                    	case 1 :
                    	    // InternalESAML.g:1239:5: (lv_features_3_0= ruleFeature )
                    	    {
                    	    // InternalESAML.g:1239:5: (lv_features_3_0= ruleFeature )
                    	    // InternalESAML.g:1240:6: lv_features_3_0= ruleFeature
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getSystemTypeAccess().getFeaturesFeatureParserRuleCall_2_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_21);
                    	    lv_features_3_0=ruleFeature();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getSystemTypeRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"features",
                    	      							lv_features_3_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Feature");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt18 >= 1 ) break loop18;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(18, input);
                                throw eee;
                        }
                        cnt18++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:1258:3: (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )?
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==40) ) {
                alt21=1;
            }
            switch (alt21) {
                case 1 :
                    // InternalESAML.g:1259:4: otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+
                    {
                    otherlv_4=(Token)match(input,40,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getSystemTypeAccess().getPropertiesKeyword_3_0());
                      			
                    }
                    // InternalESAML.g:1263:4: ( (lv_properties_5_0= ruleProperty ) )+
                    int cnt20=0;
                    loop20:
                    do {
                        int alt20=2;
                        int LA20_0 = input.LA(1);

                        if ( (LA20_0==RULE_ID||LA20_0==29||(LA20_0>=31 && LA20_0<=32)||(LA20_0>=77 && LA20_0<=84)) ) {
                            alt20=1;
                        }


                        switch (alt20) {
                    	case 1 :
                    	    // InternalESAML.g:1264:5: (lv_properties_5_0= ruleProperty )
                    	    {
                    	    // InternalESAML.g:1264:5: (lv_properties_5_0= ruleProperty )
                    	    // InternalESAML.g:1265:6: lv_properties_5_0= ruleProperty
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getSystemTypeAccess().getPropertiesPropertyParserRuleCall_3_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_23);
                    	    lv_properties_5_0=ruleProperty();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getSystemTypeRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"properties",
                    	      							lv_properties_5_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Property");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt20 >= 1 ) break loop20;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(20, input);
                                throw eee;
                        }
                        cnt20++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:1283:3: ( ( 'end' )=>otherlv_6= 'end' )
            // InternalESAML.g:1284:4: ( 'end' )=>otherlv_6= 'end'
            {
            otherlv_6=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_6, grammarAccess.getSystemTypeAccess().getEndKeyword_4());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSystemType"


    // $ANTLR start "entryRuleSubSystemType"
    // InternalESAML.g:1294:1: entryRuleSubSystemType returns [EObject current=null] : iv_ruleSubSystemType= ruleSubSystemType EOF ;
    public final EObject entryRuleSubSystemType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSubSystemType = null;


        try {
            // InternalESAML.g:1294:54: (iv_ruleSubSystemType= ruleSubSystemType EOF )
            // InternalESAML.g:1295:2: iv_ruleSubSystemType= ruleSubSystemType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSubSystemTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSubSystemType=ruleSubSystemType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSubSystemType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSubSystemType"


    // $ANTLR start "ruleSubSystemType"
    // InternalESAML.g:1301:1: ruleSubSystemType returns [EObject current=null] : (otherlv_0= 'subsystem' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) ) ;
    public final EObject ruleSubSystemType() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_features_3_0 = null;

        EObject lv_properties_5_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:1307:2: ( (otherlv_0= 'subsystem' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) ) )
            // InternalESAML.g:1308:2: (otherlv_0= 'subsystem' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) )
            {
            // InternalESAML.g:1308:2: (otherlv_0= 'subsystem' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) )
            // InternalESAML.g:1309:3: otherlv_0= 'subsystem' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' )
            {
            otherlv_0=(Token)match(input,37,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getSubSystemTypeAccess().getSubsystemKeyword_0());
              		
            }
            // InternalESAML.g:1313:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalESAML.g:1314:4: (lv_name_1_0= RULE_ID )
            {
            // InternalESAML.g:1314:4: (lv_name_1_0= RULE_ID )
            // InternalESAML.g:1315:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_19); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getSubSystemTypeAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSubSystemTypeRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:1331:3: (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )?
            int alt23=2;
            int LA23_0 = input.LA(1);

            if ( (LA23_0==39) ) {
                alt23=1;
            }
            switch (alt23) {
                case 1 :
                    // InternalESAML.g:1332:4: otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+
                    {
                    otherlv_2=(Token)match(input,39,FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getSubSystemTypeAccess().getFeaturesKeyword_2_0());
                      			
                    }
                    // InternalESAML.g:1336:4: ( (lv_features_3_0= ruleFeature ) )+
                    int cnt22=0;
                    loop22:
                    do {
                        int alt22=2;
                        int LA22_0 = input.LA(1);

                        if ( ((LA22_0>=16 && LA22_0<=20)||(LA22_0>=26 && LA22_0<=27)) ) {
                            alt22=1;
                        }


                        switch (alt22) {
                    	case 1 :
                    	    // InternalESAML.g:1337:5: (lv_features_3_0= ruleFeature )
                    	    {
                    	    // InternalESAML.g:1337:5: (lv_features_3_0= ruleFeature )
                    	    // InternalESAML.g:1338:6: lv_features_3_0= ruleFeature
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getSubSystemTypeAccess().getFeaturesFeatureParserRuleCall_2_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_21);
                    	    lv_features_3_0=ruleFeature();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getSubSystemTypeRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"features",
                    	      							lv_features_3_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Feature");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt22 >= 1 ) break loop22;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(22, input);
                                throw eee;
                        }
                        cnt22++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:1356:3: (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )?
            int alt25=2;
            int LA25_0 = input.LA(1);

            if ( (LA25_0==40) ) {
                alt25=1;
            }
            switch (alt25) {
                case 1 :
                    // InternalESAML.g:1357:4: otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+
                    {
                    otherlv_4=(Token)match(input,40,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getSubSystemTypeAccess().getPropertiesKeyword_3_0());
                      			
                    }
                    // InternalESAML.g:1361:4: ( (lv_properties_5_0= ruleProperty ) )+
                    int cnt24=0;
                    loop24:
                    do {
                        int alt24=2;
                        int LA24_0 = input.LA(1);

                        if ( (LA24_0==RULE_ID||LA24_0==29||(LA24_0>=31 && LA24_0<=32)||(LA24_0>=77 && LA24_0<=84)) ) {
                            alt24=1;
                        }


                        switch (alt24) {
                    	case 1 :
                    	    // InternalESAML.g:1362:5: (lv_properties_5_0= ruleProperty )
                    	    {
                    	    // InternalESAML.g:1362:5: (lv_properties_5_0= ruleProperty )
                    	    // InternalESAML.g:1363:6: lv_properties_5_0= ruleProperty
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getSubSystemTypeAccess().getPropertiesPropertyParserRuleCall_3_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_23);
                    	    lv_properties_5_0=ruleProperty();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getSubSystemTypeRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"properties",
                    	      							lv_properties_5_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Property");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt24 >= 1 ) break loop24;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(24, input);
                                throw eee;
                        }
                        cnt24++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:1381:3: ( ( 'end' )=>otherlv_6= 'end' )
            // InternalESAML.g:1382:4: ( 'end' )=>otherlv_6= 'end'
            {
            otherlv_6=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_6, grammarAccess.getSubSystemTypeAccess().getEndKeyword_4());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSubSystemType"


    // $ANTLR start "entryRuleActivityType"
    // InternalESAML.g:1392:1: entryRuleActivityType returns [EObject current=null] : iv_ruleActivityType= ruleActivityType EOF ;
    public final EObject entryRuleActivityType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleActivityType = null;


        try {
            // InternalESAML.g:1392:53: (iv_ruleActivityType= ruleActivityType EOF )
            // InternalESAML.g:1393:2: iv_ruleActivityType= ruleActivityType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getActivityTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleActivityType=ruleActivityType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleActivityType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleActivityType"


    // $ANTLR start "ruleActivityType"
    // InternalESAML.g:1399:1: ruleActivityType returns [EObject current=null] : ( ( (lv_modifier_0_0= ruleMODIFIER ) )? otherlv_1= 'activity' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'features' ( (lv_features_4_0= ruleFeature ) )+ )? (otherlv_5= 'properties' ( (lv_properties_6_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) ) ;
    public final EObject ruleActivityType() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        AntlrDatatypeRuleToken lv_modifier_0_0 = null;

        EObject lv_features_4_0 = null;

        EObject lv_properties_6_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:1405:2: ( ( ( (lv_modifier_0_0= ruleMODIFIER ) )? otherlv_1= 'activity' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'features' ( (lv_features_4_0= ruleFeature ) )+ )? (otherlv_5= 'properties' ( (lv_properties_6_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) ) )
            // InternalESAML.g:1406:2: ( ( (lv_modifier_0_0= ruleMODIFIER ) )? otherlv_1= 'activity' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'features' ( (lv_features_4_0= ruleFeature ) )+ )? (otherlv_5= 'properties' ( (lv_properties_6_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) )
            {
            // InternalESAML.g:1406:2: ( ( (lv_modifier_0_0= ruleMODIFIER ) )? otherlv_1= 'activity' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'features' ( (lv_features_4_0= ruleFeature ) )+ )? (otherlv_5= 'properties' ( (lv_properties_6_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) )
            // InternalESAML.g:1407:3: ( (lv_modifier_0_0= ruleMODIFIER ) )? otherlv_1= 'activity' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'features' ( (lv_features_4_0= ruleFeature ) )+ )? (otherlv_5= 'properties' ( (lv_properties_6_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_7= 'end' )
            {
            // InternalESAML.g:1407:3: ( (lv_modifier_0_0= ruleMODIFIER ) )?
            int alt26=2;
            int LA26_0 = input.LA(1);

            if ( ((LA26_0>=85 && LA26_0<=88)) ) {
                alt26=1;
            }
            switch (alt26) {
                case 1 :
                    // InternalESAML.g:1408:4: (lv_modifier_0_0= ruleMODIFIER )
                    {
                    // InternalESAML.g:1408:4: (lv_modifier_0_0= ruleMODIFIER )
                    // InternalESAML.g:1409:5: lv_modifier_0_0= ruleMODIFIER
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getActivityTypeAccess().getModifierMODIFIERParserRuleCall_0_0());
                      				
                    }
                    pushFollow(FOLLOW_24);
                    lv_modifier_0_0=ruleMODIFIER();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getActivityTypeRule());
                      					}
                      					set(
                      						current,
                      						"modifier",
                      						lv_modifier_0_0,
                      						"com.peppa.xtext.esaml.ESAML.MODIFIER");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,38,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getActivityTypeAccess().getActivityKeyword_1());
              		
            }
            // InternalESAML.g:1430:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalESAML.g:1431:4: (lv_name_2_0= RULE_ID )
            {
            // InternalESAML.g:1431:4: (lv_name_2_0= RULE_ID )
            // InternalESAML.g:1432:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_19); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_2_0, grammarAccess.getActivityTypeAccess().getNameIDTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getActivityTypeRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_2_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:1448:3: (otherlv_3= 'features' ( (lv_features_4_0= ruleFeature ) )+ )?
            int alt28=2;
            int LA28_0 = input.LA(1);

            if ( (LA28_0==39) ) {
                alt28=1;
            }
            switch (alt28) {
                case 1 :
                    // InternalESAML.g:1449:4: otherlv_3= 'features' ( (lv_features_4_0= ruleFeature ) )+
                    {
                    otherlv_3=(Token)match(input,39,FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getActivityTypeAccess().getFeaturesKeyword_3_0());
                      			
                    }
                    // InternalESAML.g:1453:4: ( (lv_features_4_0= ruleFeature ) )+
                    int cnt27=0;
                    loop27:
                    do {
                        int alt27=2;
                        int LA27_0 = input.LA(1);

                        if ( ((LA27_0>=16 && LA27_0<=20)||(LA27_0>=26 && LA27_0<=27)) ) {
                            alt27=1;
                        }


                        switch (alt27) {
                    	case 1 :
                    	    // InternalESAML.g:1454:5: (lv_features_4_0= ruleFeature )
                    	    {
                    	    // InternalESAML.g:1454:5: (lv_features_4_0= ruleFeature )
                    	    // InternalESAML.g:1455:6: lv_features_4_0= ruleFeature
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getActivityTypeAccess().getFeaturesFeatureParserRuleCall_3_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_21);
                    	    lv_features_4_0=ruleFeature();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getActivityTypeRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"features",
                    	      							lv_features_4_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Feature");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt27 >= 1 ) break loop27;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(27, input);
                                throw eee;
                        }
                        cnt27++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:1473:3: (otherlv_5= 'properties' ( (lv_properties_6_0= ruleProperty ) )+ )?
            int alt30=2;
            int LA30_0 = input.LA(1);

            if ( (LA30_0==40) ) {
                alt30=1;
            }
            switch (alt30) {
                case 1 :
                    // InternalESAML.g:1474:4: otherlv_5= 'properties' ( (lv_properties_6_0= ruleProperty ) )+
                    {
                    otherlv_5=(Token)match(input,40,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getActivityTypeAccess().getPropertiesKeyword_4_0());
                      			
                    }
                    // InternalESAML.g:1478:4: ( (lv_properties_6_0= ruleProperty ) )+
                    int cnt29=0;
                    loop29:
                    do {
                        int alt29=2;
                        int LA29_0 = input.LA(1);

                        if ( (LA29_0==RULE_ID||LA29_0==29||(LA29_0>=31 && LA29_0<=32)||(LA29_0>=77 && LA29_0<=84)) ) {
                            alt29=1;
                        }


                        switch (alt29) {
                    	case 1 :
                    	    // InternalESAML.g:1479:5: (lv_properties_6_0= ruleProperty )
                    	    {
                    	    // InternalESAML.g:1479:5: (lv_properties_6_0= ruleProperty )
                    	    // InternalESAML.g:1480:6: lv_properties_6_0= ruleProperty
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getActivityTypeAccess().getPropertiesPropertyParserRuleCall_4_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_23);
                    	    lv_properties_6_0=ruleProperty();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getActivityTypeRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"properties",
                    	      							lv_properties_6_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Property");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt29 >= 1 ) break loop29;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(29, input);
                                throw eee;
                        }
                        cnt29++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:1498:3: ( ( 'end' )=>otherlv_7= 'end' )
            // InternalESAML.g:1499:4: ( 'end' )=>otherlv_7= 'end'
            {
            otherlv_7=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_7, grammarAccess.getActivityTypeAccess().getEndKeyword_5());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleActivityType"


    // $ANTLR start "entryRuleStateType"
    // InternalESAML.g:1509:1: entryRuleStateType returns [EObject current=null] : iv_ruleStateType= ruleStateType EOF ;
    public final EObject entryRuleStateType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStateType = null;


        try {
            // InternalESAML.g:1509:50: (iv_ruleStateType= ruleStateType EOF )
            // InternalESAML.g:1510:2: iv_ruleStateType= ruleStateType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getStateTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleStateType=ruleStateType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleStateType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleStateType"


    // $ANTLR start "ruleStateType"
    // InternalESAML.g:1516:1: ruleStateType returns [EObject current=null] : (otherlv_0= 'state' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'properties' ( (lv_properties_3_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_4= 'end' ) ) ;
    public final EObject ruleStateType() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_properties_3_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:1522:2: ( (otherlv_0= 'state' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'properties' ( (lv_properties_3_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_4= 'end' ) ) )
            // InternalESAML.g:1523:2: (otherlv_0= 'state' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'properties' ( (lv_properties_3_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_4= 'end' ) )
            {
            // InternalESAML.g:1523:2: (otherlv_0= 'state' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'properties' ( (lv_properties_3_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_4= 'end' ) )
            // InternalESAML.g:1524:3: otherlv_0= 'state' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'properties' ( (lv_properties_3_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_4= 'end' )
            {
            otherlv_0=(Token)match(input,42,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getStateTypeAccess().getStateKeyword_0());
              		
            }
            // InternalESAML.g:1528:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalESAML.g:1529:4: (lv_name_1_0= RULE_ID )
            {
            // InternalESAML.g:1529:4: (lv_name_1_0= RULE_ID )
            // InternalESAML.g:1530:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_25); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getStateTypeAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getStateTypeRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:1546:3: (otherlv_2= 'properties' ( (lv_properties_3_0= ruleProperty ) )+ )?
            int alt32=2;
            int LA32_0 = input.LA(1);

            if ( (LA32_0==40) ) {
                alt32=1;
            }
            switch (alt32) {
                case 1 :
                    // InternalESAML.g:1547:4: otherlv_2= 'properties' ( (lv_properties_3_0= ruleProperty ) )+
                    {
                    otherlv_2=(Token)match(input,40,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getStateTypeAccess().getPropertiesKeyword_2_0());
                      			
                    }
                    // InternalESAML.g:1551:4: ( (lv_properties_3_0= ruleProperty ) )+
                    int cnt31=0;
                    loop31:
                    do {
                        int alt31=2;
                        int LA31_0 = input.LA(1);

                        if ( (LA31_0==RULE_ID||LA31_0==29||(LA31_0>=31 && LA31_0<=32)||(LA31_0>=77 && LA31_0<=84)) ) {
                            alt31=1;
                        }


                        switch (alt31) {
                    	case 1 :
                    	    // InternalESAML.g:1552:5: (lv_properties_3_0= ruleProperty )
                    	    {
                    	    // InternalESAML.g:1552:5: (lv_properties_3_0= ruleProperty )
                    	    // InternalESAML.g:1553:6: lv_properties_3_0= ruleProperty
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getStateTypeAccess().getPropertiesPropertyParserRuleCall_2_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_23);
                    	    lv_properties_3_0=ruleProperty();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getStateTypeRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"properties",
                    	      							lv_properties_3_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Property");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt31 >= 1 ) break loop31;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(31, input);
                                throw eee;
                        }
                        cnt31++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:1571:3: ( ( 'end' )=>otherlv_4= 'end' )
            // InternalESAML.g:1572:4: ( 'end' )=>otherlv_4= 'end'
            {
            otherlv_4=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_4, grammarAccess.getStateTypeAccess().getEndKeyword_3());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleStateType"


    // $ANTLR start "entryRuleTimeTriggerType"
    // InternalESAML.g:1582:1: entryRuleTimeTriggerType returns [EObject current=null] : iv_ruleTimeTriggerType= ruleTimeTriggerType EOF ;
    public final EObject entryRuleTimeTriggerType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTimeTriggerType = null;


        try {
            // InternalESAML.g:1582:56: (iv_ruleTimeTriggerType= ruleTimeTriggerType EOF )
            // InternalESAML.g:1583:2: iv_ruleTimeTriggerType= ruleTimeTriggerType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTimeTriggerTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleTimeTriggerType=ruleTimeTriggerType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTimeTriggerType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTimeTriggerType"


    // $ANTLR start "ruleTimeTriggerType"
    // InternalESAML.g:1589:1: ruleTimeTriggerType returns [EObject current=null] : (otherlv_0= 'timetrigger' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) ) ;
    public final EObject ruleTimeTriggerType() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_features_3_0 = null;

        EObject lv_properties_5_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:1595:2: ( (otherlv_0= 'timetrigger' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) ) )
            // InternalESAML.g:1596:2: (otherlv_0= 'timetrigger' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) )
            {
            // InternalESAML.g:1596:2: (otherlv_0= 'timetrigger' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' ) )
            // InternalESAML.g:1597:3: otherlv_0= 'timetrigger' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )? ( ( 'end' )=>otherlv_6= 'end' )
            {
            otherlv_0=(Token)match(input,43,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getTimeTriggerTypeAccess().getTimetriggerKeyword_0());
              		
            }
            // InternalESAML.g:1601:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalESAML.g:1602:4: (lv_name_1_0= RULE_ID )
            {
            // InternalESAML.g:1602:4: (lv_name_1_0= RULE_ID )
            // InternalESAML.g:1603:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_19); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getTimeTriggerTypeAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getTimeTriggerTypeRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:1619:3: (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )?
            int alt34=2;
            int LA34_0 = input.LA(1);

            if ( (LA34_0==39) ) {
                alt34=1;
            }
            switch (alt34) {
                case 1 :
                    // InternalESAML.g:1620:4: otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+
                    {
                    otherlv_2=(Token)match(input,39,FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getTimeTriggerTypeAccess().getFeaturesKeyword_2_0());
                      			
                    }
                    // InternalESAML.g:1624:4: ( (lv_features_3_0= ruleFeature ) )+
                    int cnt33=0;
                    loop33:
                    do {
                        int alt33=2;
                        int LA33_0 = input.LA(1);

                        if ( ((LA33_0>=16 && LA33_0<=20)||(LA33_0>=26 && LA33_0<=27)) ) {
                            alt33=1;
                        }


                        switch (alt33) {
                    	case 1 :
                    	    // InternalESAML.g:1625:5: (lv_features_3_0= ruleFeature )
                    	    {
                    	    // InternalESAML.g:1625:5: (lv_features_3_0= ruleFeature )
                    	    // InternalESAML.g:1626:6: lv_features_3_0= ruleFeature
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getTimeTriggerTypeAccess().getFeaturesFeatureParserRuleCall_2_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_21);
                    	    lv_features_3_0=ruleFeature();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getTimeTriggerTypeRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"features",
                    	      							lv_features_3_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Feature");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt33 >= 1 ) break loop33;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(33, input);
                                throw eee;
                        }
                        cnt33++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:1644:3: (otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+ )?
            int alt36=2;
            int LA36_0 = input.LA(1);

            if ( (LA36_0==40) ) {
                alt36=1;
            }
            switch (alt36) {
                case 1 :
                    // InternalESAML.g:1645:4: otherlv_4= 'properties' ( (lv_properties_5_0= ruleProperty ) )+
                    {
                    otherlv_4=(Token)match(input,40,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getTimeTriggerTypeAccess().getPropertiesKeyword_3_0());
                      			
                    }
                    // InternalESAML.g:1649:4: ( (lv_properties_5_0= ruleProperty ) )+
                    int cnt35=0;
                    loop35:
                    do {
                        int alt35=2;
                        int LA35_0 = input.LA(1);

                        if ( (LA35_0==RULE_ID||LA35_0==29||(LA35_0>=31 && LA35_0<=32)||(LA35_0>=77 && LA35_0<=84)) ) {
                            alt35=1;
                        }


                        switch (alt35) {
                    	case 1 :
                    	    // InternalESAML.g:1650:5: (lv_properties_5_0= ruleProperty )
                    	    {
                    	    // InternalESAML.g:1650:5: (lv_properties_5_0= ruleProperty )
                    	    // InternalESAML.g:1651:6: lv_properties_5_0= ruleProperty
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getTimeTriggerTypeAccess().getPropertiesPropertyParserRuleCall_3_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_23);
                    	    lv_properties_5_0=ruleProperty();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getTimeTriggerTypeRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"properties",
                    	      							lv_properties_5_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Property");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt35 >= 1 ) break loop35;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(35, input);
                                throw eee;
                        }
                        cnt35++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:1669:3: ( ( 'end' )=>otherlv_6= 'end' )
            // InternalESAML.g:1670:4: ( 'end' )=>otherlv_6= 'end'
            {
            otherlv_6=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_6, grammarAccess.getTimeTriggerTypeAccess().getEndKeyword_4());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTimeTriggerType"


    // $ANTLR start "entryRuleMonitorType"
    // InternalESAML.g:1680:1: entryRuleMonitorType returns [EObject current=null] : iv_ruleMonitorType= ruleMonitorType EOF ;
    public final EObject entryRuleMonitorType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMonitorType = null;


        try {
            // InternalESAML.g:1680:52: (iv_ruleMonitorType= ruleMonitorType EOF )
            // InternalESAML.g:1681:2: iv_ruleMonitorType= ruleMonitorType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMonitorTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleMonitorType=ruleMonitorType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMonitorType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMonitorType"


    // $ANTLR start "ruleMonitorType"
    // InternalESAML.g:1687:1: ruleMonitorType returns [EObject current=null] : (otherlv_0= 'monitor' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? ( ( 'end' )=>otherlv_4= 'end' ) ) ;
    public final EObject ruleMonitorType() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_features_3_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:1693:2: ( (otherlv_0= 'monitor' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? ( ( 'end' )=>otherlv_4= 'end' ) ) )
            // InternalESAML.g:1694:2: (otherlv_0= 'monitor' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? ( ( 'end' )=>otherlv_4= 'end' ) )
            {
            // InternalESAML.g:1694:2: (otherlv_0= 'monitor' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? ( ( 'end' )=>otherlv_4= 'end' ) )
            // InternalESAML.g:1695:3: otherlv_0= 'monitor' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )? ( ( 'end' )=>otherlv_4= 'end' )
            {
            otherlv_0=(Token)match(input,44,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getMonitorTypeAccess().getMonitorKeyword_0());
              		
            }
            // InternalESAML.g:1699:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalESAML.g:1700:4: (lv_name_1_0= RULE_ID )
            {
            // InternalESAML.g:1700:4: (lv_name_1_0= RULE_ID )
            // InternalESAML.g:1701:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_26); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getMonitorTypeAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getMonitorTypeRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:1717:3: (otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+ )?
            int alt38=2;
            int LA38_0 = input.LA(1);

            if ( (LA38_0==39) ) {
                alt38=1;
            }
            switch (alt38) {
                case 1 :
                    // InternalESAML.g:1718:4: otherlv_2= 'features' ( (lv_features_3_0= ruleFeature ) )+
                    {
                    otherlv_2=(Token)match(input,39,FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getMonitorTypeAccess().getFeaturesKeyword_2_0());
                      			
                    }
                    // InternalESAML.g:1722:4: ( (lv_features_3_0= ruleFeature ) )+
                    int cnt37=0;
                    loop37:
                    do {
                        int alt37=2;
                        int LA37_0 = input.LA(1);

                        if ( ((LA37_0>=16 && LA37_0<=20)||(LA37_0>=26 && LA37_0<=27)) ) {
                            alt37=1;
                        }


                        switch (alt37) {
                    	case 1 :
                    	    // InternalESAML.g:1723:5: (lv_features_3_0= ruleFeature )
                    	    {
                    	    // InternalESAML.g:1723:5: (lv_features_3_0= ruleFeature )
                    	    // InternalESAML.g:1724:6: lv_features_3_0= ruleFeature
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getMonitorTypeAccess().getFeaturesFeatureParserRuleCall_2_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_27);
                    	    lv_features_3_0=ruleFeature();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getMonitorTypeRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"features",
                    	      							lv_features_3_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Feature");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt37 >= 1 ) break loop37;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(37, input);
                                throw eee;
                        }
                        cnt37++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:1742:3: ( ( 'end' )=>otherlv_4= 'end' )
            // InternalESAML.g:1743:4: ( 'end' )=>otherlv_4= 'end'
            {
            otherlv_4=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_4, grammarAccess.getMonitorTypeAccess().getEndKeyword_3());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMonitorType"


    // $ANTLR start "entryRuleDataComponentType"
    // InternalESAML.g:1753:1: entryRuleDataComponentType returns [EObject current=null] : iv_ruleDataComponentType= ruleDataComponentType EOF ;
    public final EObject entryRuleDataComponentType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDataComponentType = null;


        try {
            // InternalESAML.g:1753:58: (iv_ruleDataComponentType= ruleDataComponentType EOF )
            // InternalESAML.g:1754:2: iv_ruleDataComponentType= ruleDataComponentType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDataComponentTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDataComponentType=ruleDataComponentType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDataComponentType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDataComponentType"


    // $ANTLR start "ruleDataComponentType"
    // InternalESAML.g:1760:1: ruleDataComponentType returns [EObject current=null] : (otherlv_0= 'data' ( (lv_name_1_0= RULE_ID ) ) ( (lv_properties_2_0= ruleProperty ) )* ( ( 'end' )=>otherlv_3= 'end' ) ) ;
    public final EObject ruleDataComponentType() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_3=null;
        EObject lv_properties_2_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:1766:2: ( (otherlv_0= 'data' ( (lv_name_1_0= RULE_ID ) ) ( (lv_properties_2_0= ruleProperty ) )* ( ( 'end' )=>otherlv_3= 'end' ) ) )
            // InternalESAML.g:1767:2: (otherlv_0= 'data' ( (lv_name_1_0= RULE_ID ) ) ( (lv_properties_2_0= ruleProperty ) )* ( ( 'end' )=>otherlv_3= 'end' ) )
            {
            // InternalESAML.g:1767:2: (otherlv_0= 'data' ( (lv_name_1_0= RULE_ID ) ) ( (lv_properties_2_0= ruleProperty ) )* ( ( 'end' )=>otherlv_3= 'end' ) )
            // InternalESAML.g:1768:3: otherlv_0= 'data' ( (lv_name_1_0= RULE_ID ) ) ( (lv_properties_2_0= ruleProperty ) )* ( ( 'end' )=>otherlv_3= 'end' )
            {
            otherlv_0=(Token)match(input,25,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDataComponentTypeAccess().getDataKeyword_0());
              		
            }
            // InternalESAML.g:1772:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalESAML.g:1773:4: (lv_name_1_0= RULE_ID )
            {
            // InternalESAML.g:1773:4: (lv_name_1_0= RULE_ID )
            // InternalESAML.g:1774:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_23); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getDataComponentTypeAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDataComponentTypeRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:1790:3: ( (lv_properties_2_0= ruleProperty ) )*
            loop39:
            do {
                int alt39=2;
                int LA39_0 = input.LA(1);

                if ( (LA39_0==RULE_ID||LA39_0==29||(LA39_0>=31 && LA39_0<=32)||(LA39_0>=77 && LA39_0<=84)) ) {
                    alt39=1;
                }


                switch (alt39) {
            	case 1 :
            	    // InternalESAML.g:1791:4: (lv_properties_2_0= ruleProperty )
            	    {
            	    // InternalESAML.g:1791:4: (lv_properties_2_0= ruleProperty )
            	    // InternalESAML.g:1792:5: lv_properties_2_0= ruleProperty
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getDataComponentTypeAccess().getPropertiesPropertyParserRuleCall_2_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_23);
            	    lv_properties_2_0=ruleProperty();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getDataComponentTypeRule());
            	      					}
            	      					add(
            	      						current,
            	      						"properties",
            	      						lv_properties_2_0,
            	      						"com.peppa.xtext.esaml.ESAML.Property");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop39;
                }
            } while (true);

            // InternalESAML.g:1809:3: ( ( 'end' )=>otherlv_3= 'end' )
            // InternalESAML.g:1810:4: ( 'end' )=>otherlv_3= 'end'
            {
            otherlv_3=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_3, grammarAccess.getDataComponentTypeAccess().getEndKeyword_3());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDataComponentType"


    // $ANTLR start "entryRuleInit"
    // InternalESAML.g:1820:1: entryRuleInit returns [EObject current=null] : iv_ruleInit= ruleInit EOF ;
    public final EObject entryRuleInit() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInit = null;


        try {
            // InternalESAML.g:1820:45: (iv_ruleInit= ruleInit EOF )
            // InternalESAML.g:1821:2: iv_ruleInit= ruleInit EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getInitRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleInit=ruleInit();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleInit; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInit"


    // $ANTLR start "ruleInit"
    // InternalESAML.g:1827:1: ruleInit returns [EObject current=null] : ( ( (lv_variableName_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_ID ) ) ( ( ';' )=>otherlv_3= ';' ) ) ;
    public final EObject ruleInit() throws RecognitionException {
        EObject current = null;

        Token lv_variableName_0_0=null;
        Token otherlv_1=null;
        Token lv_value_2_0=null;
        Token otherlv_3=null;


        	enterRule();

        try {
            // InternalESAML.g:1833:2: ( ( ( (lv_variableName_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_ID ) ) ( ( ';' )=>otherlv_3= ';' ) ) )
            // InternalESAML.g:1834:2: ( ( (lv_variableName_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_ID ) ) ( ( ';' )=>otherlv_3= ';' ) )
            {
            // InternalESAML.g:1834:2: ( ( (lv_variableName_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_ID ) ) ( ( ';' )=>otherlv_3= ';' ) )
            // InternalESAML.g:1835:3: ( (lv_variableName_0_0= RULE_ID ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_ID ) ) ( ( ';' )=>otherlv_3= ';' )
            {
            // InternalESAML.g:1835:3: ( (lv_variableName_0_0= RULE_ID ) )
            // InternalESAML.g:1836:4: (lv_variableName_0_0= RULE_ID )
            {
            // InternalESAML.g:1836:4: (lv_variableName_0_0= RULE_ID )
            // InternalESAML.g:1837:5: lv_variableName_0_0= RULE_ID
            {
            lv_variableName_0_0=(Token)match(input,RULE_ID,FOLLOW_28); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_variableName_0_0, grammarAccess.getInitAccess().getVariableNameIDTerminalRuleCall_0_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getInitRule());
              					}
              					setWithLastConsumed(
              						current,
              						"variableName",
              						lv_variableName_0_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            otherlv_1=(Token)match(input,45,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getInitAccess().getEqualsSignKeyword_1());
              		
            }
            // InternalESAML.g:1857:3: ( (lv_value_2_0= RULE_ID ) )
            // InternalESAML.g:1858:4: (lv_value_2_0= RULE_ID )
            {
            // InternalESAML.g:1858:4: (lv_value_2_0= RULE_ID )
            // InternalESAML.g:1859:5: lv_value_2_0= RULE_ID
            {
            lv_value_2_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_value_2_0, grammarAccess.getInitAccess().getValueIDTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getInitRule());
              					}
              					setWithLastConsumed(
              						current,
              						"value",
              						lv_value_2_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:1875:3: ( ( ';' )=>otherlv_3= ';' )
            // InternalESAML.g:1876:4: ( ';' )=>otherlv_3= ';'
            {
            otherlv_3=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_3, grammarAccess.getInitAccess().getSemicolonKeyword_3());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInit"


    // $ANTLR start "entryRuleSchedule"
    // InternalESAML.g:1886:1: entryRuleSchedule returns [EObject current=null] : iv_ruleSchedule= ruleSchedule EOF ;
    public final EObject entryRuleSchedule() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSchedule = null;


        try {
            // InternalESAML.g:1886:49: (iv_ruleSchedule= ruleSchedule EOF )
            // InternalESAML.g:1887:2: iv_ruleSchedule= ruleSchedule EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getScheduleRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSchedule=ruleSchedule();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSchedule; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSchedule"


    // $ANTLR start "ruleSchedule"
    // InternalESAML.g:1893:1: ruleSchedule returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '>' ( (otherlv_2= RULE_ID ) ) )* ( ( ';' )=>otherlv_3= ';' ) ) ;
    public final EObject ruleSchedule() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;


        	enterRule();

        try {
            // InternalESAML.g:1899:2: ( ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '>' ( (otherlv_2= RULE_ID ) ) )* ( ( ';' )=>otherlv_3= ';' ) ) )
            // InternalESAML.g:1900:2: ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '>' ( (otherlv_2= RULE_ID ) ) )* ( ( ';' )=>otherlv_3= ';' ) )
            {
            // InternalESAML.g:1900:2: ( ( (otherlv_0= RULE_ID ) ) (otherlv_1= '>' ( (otherlv_2= RULE_ID ) ) )* ( ( ';' )=>otherlv_3= ';' ) )
            // InternalESAML.g:1901:3: ( (otherlv_0= RULE_ID ) ) (otherlv_1= '>' ( (otherlv_2= RULE_ID ) ) )* ( ( ';' )=>otherlv_3= ';' )
            {
            // InternalESAML.g:1901:3: ( (otherlv_0= RULE_ID ) )
            // InternalESAML.g:1902:4: (otherlv_0= RULE_ID )
            {
            // InternalESAML.g:1902:4: (otherlv_0= RULE_ID )
            // InternalESAML.g:1903:5: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getScheduleRule());
              					}
              				
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_29); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_0, grammarAccess.getScheduleAccess().getActivitysActivitySubComponentCrossReference_0_0());
              				
            }

            }


            }

            // InternalESAML.g:1914:3: (otherlv_1= '>' ( (otherlv_2= RULE_ID ) ) )*
            loop40:
            do {
                int alt40=2;
                int LA40_0 = input.LA(1);

                if ( (LA40_0==46) ) {
                    alt40=1;
                }


                switch (alt40) {
            	case 1 :
            	    // InternalESAML.g:1915:4: otherlv_1= '>' ( (otherlv_2= RULE_ID ) )
            	    {
            	    otherlv_1=(Token)match(input,46,FOLLOW_8); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				newLeafNode(otherlv_1, grammarAccess.getScheduleAccess().getGreaterThanSignKeyword_1_0());
            	      			
            	    }
            	    // InternalESAML.g:1919:4: ( (otherlv_2= RULE_ID ) )
            	    // InternalESAML.g:1920:5: (otherlv_2= RULE_ID )
            	    {
            	    // InternalESAML.g:1920:5: (otherlv_2= RULE_ID )
            	    // InternalESAML.g:1921:6: otherlv_2= RULE_ID
            	    {
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElement(grammarAccess.getScheduleRule());
            	      						}
            	      					
            	    }
            	    otherlv_2=(Token)match(input,RULE_ID,FOLLOW_29); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						newLeafNode(otherlv_2, grammarAccess.getScheduleAccess().getActivitysActivitySubComponentCrossReference_1_1_0());
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop40;
                }
            } while (true);

            // InternalESAML.g:1933:3: ( ( ';' )=>otherlv_3= ';' )
            // InternalESAML.g:1934:4: ( ';' )=>otherlv_3= ';'
            {
            otherlv_3=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_3, grammarAccess.getScheduleAccess().getSemicolonKeyword_2());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSchedule"


    // $ANTLR start "entryRuleOperation"
    // InternalESAML.g:1944:1: entryRuleOperation returns [EObject current=null] : iv_ruleOperation= ruleOperation EOF ;
    public final EObject entryRuleOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleOperation = null;


        try {
            // InternalESAML.g:1944:50: (iv_ruleOperation= ruleOperation EOF )
            // InternalESAML.g:1945:2: iv_ruleOperation= ruleOperation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOperationRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOperation=ruleOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOperation; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOperation"


    // $ANTLR start "ruleOperation"
    // InternalESAML.g:1951:1: ruleOperation returns [EObject current=null] : ( () ( (lv_operation_1_0= RULE_STRING ) ) ) ;
    public final EObject ruleOperation() throws RecognitionException {
        EObject current = null;

        Token lv_operation_1_0=null;


        	enterRule();

        try {
            // InternalESAML.g:1957:2: ( ( () ( (lv_operation_1_0= RULE_STRING ) ) ) )
            // InternalESAML.g:1958:2: ( () ( (lv_operation_1_0= RULE_STRING ) ) )
            {
            // InternalESAML.g:1958:2: ( () ( (lv_operation_1_0= RULE_STRING ) ) )
            // InternalESAML.g:1959:3: () ( (lv_operation_1_0= RULE_STRING ) )
            {
            // InternalESAML.g:1959:3: ()
            // InternalESAML.g:1960:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getOperationAccess().getOperationAction_0(),
              					current);
              			
            }

            }

            // InternalESAML.g:1966:3: ( (lv_operation_1_0= RULE_STRING ) )
            // InternalESAML.g:1967:4: (lv_operation_1_0= RULE_STRING )
            {
            // InternalESAML.g:1967:4: (lv_operation_1_0= RULE_STRING )
            // InternalESAML.g:1968:5: lv_operation_1_0= RULE_STRING
            {
            lv_operation_1_0=(Token)match(input,RULE_STRING,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_operation_1_0, grammarAccess.getOperationAccess().getOperationSTRINGTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getOperationRule());
              					}
              					setWithLastConsumed(
              						current,
              						"operation",
              						lv_operation_1_0,
              						"org.eclipse.xtext.common.Terminals.STRING");
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOperation"


    // $ANTLR start "entryRuleConstraint"
    // InternalESAML.g:1988:1: entryRuleConstraint returns [EObject current=null] : iv_ruleConstraint= ruleConstraint EOF ;
    public final EObject entryRuleConstraint() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConstraint = null;


        try {
            // InternalESAML.g:1988:51: (iv_ruleConstraint= ruleConstraint EOF )
            // InternalESAML.g:1989:2: iv_ruleConstraint= ruleConstraint EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getConstraintRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleConstraint=ruleConstraint();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleConstraint; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleConstraint"


    // $ANTLR start "ruleConstraint"
    // InternalESAML.g:1995:1: ruleConstraint returns [EObject current=null] : ( () ( (otherlv_1= 'at' this_ISO8601_DATE_TIME_2= RULE_ISO8601_DATE_TIME ) | (otherlv_3= 'after' ruleNumericValue otherlv_5= 'ms' ) | ( (this_ID_6= RULE_ID | this_IMPLNAME_7= RULE_IMPLNAME ) (otherlv_8= 'after' | otherlv_9= 'before' ) (this_ID_10= RULE_ID | this_IMPLNAME_11= RULE_IMPLNAME ) ruleNumericValue otherlv_13= 'ms' ) ) otherlv_14= 'excute' (this_ID_15= RULE_ID | this_IMPLNAME_16= RULE_IMPLNAME ) otherlv_17= ';' ) ;
    public final EObject ruleConstraint() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token this_ISO8601_DATE_TIME_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token this_ID_6=null;
        Token this_IMPLNAME_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token this_ID_10=null;
        Token this_IMPLNAME_11=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token this_ID_15=null;
        Token this_IMPLNAME_16=null;
        Token otherlv_17=null;


        	enterRule();

        try {
            // InternalESAML.g:2001:2: ( ( () ( (otherlv_1= 'at' this_ISO8601_DATE_TIME_2= RULE_ISO8601_DATE_TIME ) | (otherlv_3= 'after' ruleNumericValue otherlv_5= 'ms' ) | ( (this_ID_6= RULE_ID | this_IMPLNAME_7= RULE_IMPLNAME ) (otherlv_8= 'after' | otherlv_9= 'before' ) (this_ID_10= RULE_ID | this_IMPLNAME_11= RULE_IMPLNAME ) ruleNumericValue otherlv_13= 'ms' ) ) otherlv_14= 'excute' (this_ID_15= RULE_ID | this_IMPLNAME_16= RULE_IMPLNAME ) otherlv_17= ';' ) )
            // InternalESAML.g:2002:2: ( () ( (otherlv_1= 'at' this_ISO8601_DATE_TIME_2= RULE_ISO8601_DATE_TIME ) | (otherlv_3= 'after' ruleNumericValue otherlv_5= 'ms' ) | ( (this_ID_6= RULE_ID | this_IMPLNAME_7= RULE_IMPLNAME ) (otherlv_8= 'after' | otherlv_9= 'before' ) (this_ID_10= RULE_ID | this_IMPLNAME_11= RULE_IMPLNAME ) ruleNumericValue otherlv_13= 'ms' ) ) otherlv_14= 'excute' (this_ID_15= RULE_ID | this_IMPLNAME_16= RULE_IMPLNAME ) otherlv_17= ';' )
            {
            // InternalESAML.g:2002:2: ( () ( (otherlv_1= 'at' this_ISO8601_DATE_TIME_2= RULE_ISO8601_DATE_TIME ) | (otherlv_3= 'after' ruleNumericValue otherlv_5= 'ms' ) | ( (this_ID_6= RULE_ID | this_IMPLNAME_7= RULE_IMPLNAME ) (otherlv_8= 'after' | otherlv_9= 'before' ) (this_ID_10= RULE_ID | this_IMPLNAME_11= RULE_IMPLNAME ) ruleNumericValue otherlv_13= 'ms' ) ) otherlv_14= 'excute' (this_ID_15= RULE_ID | this_IMPLNAME_16= RULE_IMPLNAME ) otherlv_17= ';' )
            // InternalESAML.g:2003:3: () ( (otherlv_1= 'at' this_ISO8601_DATE_TIME_2= RULE_ISO8601_DATE_TIME ) | (otherlv_3= 'after' ruleNumericValue otherlv_5= 'ms' ) | ( (this_ID_6= RULE_ID | this_IMPLNAME_7= RULE_IMPLNAME ) (otherlv_8= 'after' | otherlv_9= 'before' ) (this_ID_10= RULE_ID | this_IMPLNAME_11= RULE_IMPLNAME ) ruleNumericValue otherlv_13= 'ms' ) ) otherlv_14= 'excute' (this_ID_15= RULE_ID | this_IMPLNAME_16= RULE_IMPLNAME ) otherlv_17= ';'
            {
            // InternalESAML.g:2003:3: ()
            // InternalESAML.g:2004:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getConstraintAccess().getConstraintAction_0(),
              					current);
              			
            }

            }

            // InternalESAML.g:2010:3: ( (otherlv_1= 'at' this_ISO8601_DATE_TIME_2= RULE_ISO8601_DATE_TIME ) | (otherlv_3= 'after' ruleNumericValue otherlv_5= 'ms' ) | ( (this_ID_6= RULE_ID | this_IMPLNAME_7= RULE_IMPLNAME ) (otherlv_8= 'after' | otherlv_9= 'before' ) (this_ID_10= RULE_ID | this_IMPLNAME_11= RULE_IMPLNAME ) ruleNumericValue otherlv_13= 'ms' ) )
            int alt44=3;
            switch ( input.LA(1) ) {
            case 47:
                {
                alt44=1;
                }
                break;
            case 48:
                {
                alt44=2;
                }
                break;
            case RULE_ID:
            case RULE_IMPLNAME:
                {
                alt44=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 44, 0, input);

                throw nvae;
            }

            switch (alt44) {
                case 1 :
                    // InternalESAML.g:2011:4: (otherlv_1= 'at' this_ISO8601_DATE_TIME_2= RULE_ISO8601_DATE_TIME )
                    {
                    // InternalESAML.g:2011:4: (otherlv_1= 'at' this_ISO8601_DATE_TIME_2= RULE_ISO8601_DATE_TIME )
                    // InternalESAML.g:2012:5: otherlv_1= 'at' this_ISO8601_DATE_TIME_2= RULE_ISO8601_DATE_TIME
                    {
                    otherlv_1=(Token)match(input,47,FOLLOW_30); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_1, grammarAccess.getConstraintAccess().getAtKeyword_1_0_0());
                      				
                    }
                    this_ISO8601_DATE_TIME_2=(Token)match(input,RULE_ISO8601_DATE_TIME,FOLLOW_31); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(this_ISO8601_DATE_TIME_2, grammarAccess.getConstraintAccess().getISO8601_DATE_TIMETerminalRuleCall_1_0_1());
                      				
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalESAML.g:2022:4: (otherlv_3= 'after' ruleNumericValue otherlv_5= 'ms' )
                    {
                    // InternalESAML.g:2022:4: (otherlv_3= 'after' ruleNumericValue otherlv_5= 'ms' )
                    // InternalESAML.g:2023:5: otherlv_3= 'after' ruleNumericValue otherlv_5= 'ms'
                    {
                    otherlv_3=(Token)match(input,48,FOLLOW_12); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_3, grammarAccess.getConstraintAccess().getAfterKeyword_1_1_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getConstraintAccess().getNumericValueParserRuleCall_1_1_1());
                      				
                    }
                    pushFollow(FOLLOW_13);
                    ruleNumericValue();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					afterParserOrEnumRuleCall();
                      				
                    }
                    otherlv_5=(Token)match(input,30,FOLLOW_31); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_5, grammarAccess.getConstraintAccess().getMsKeyword_1_1_2());
                      				
                    }

                    }


                    }
                    break;
                case 3 :
                    // InternalESAML.g:2040:4: ( (this_ID_6= RULE_ID | this_IMPLNAME_7= RULE_IMPLNAME ) (otherlv_8= 'after' | otherlv_9= 'before' ) (this_ID_10= RULE_ID | this_IMPLNAME_11= RULE_IMPLNAME ) ruleNumericValue otherlv_13= 'ms' )
                    {
                    // InternalESAML.g:2040:4: ( (this_ID_6= RULE_ID | this_IMPLNAME_7= RULE_IMPLNAME ) (otherlv_8= 'after' | otherlv_9= 'before' ) (this_ID_10= RULE_ID | this_IMPLNAME_11= RULE_IMPLNAME ) ruleNumericValue otherlv_13= 'ms' )
                    // InternalESAML.g:2041:5: (this_ID_6= RULE_ID | this_IMPLNAME_7= RULE_IMPLNAME ) (otherlv_8= 'after' | otherlv_9= 'before' ) (this_ID_10= RULE_ID | this_IMPLNAME_11= RULE_IMPLNAME ) ruleNumericValue otherlv_13= 'ms'
                    {
                    // InternalESAML.g:2041:5: (this_ID_6= RULE_ID | this_IMPLNAME_7= RULE_IMPLNAME )
                    int alt41=2;
                    int LA41_0 = input.LA(1);

                    if ( (LA41_0==RULE_ID) ) {
                        alt41=1;
                    }
                    else if ( (LA41_0==RULE_IMPLNAME) ) {
                        alt41=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 41, 0, input);

                        throw nvae;
                    }
                    switch (alt41) {
                        case 1 :
                            // InternalESAML.g:2042:6: this_ID_6= RULE_ID
                            {
                            this_ID_6=(Token)match(input,RULE_ID,FOLLOW_32); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(this_ID_6, grammarAccess.getConstraintAccess().getIDTerminalRuleCall_1_2_0_0());
                              					
                            }

                            }
                            break;
                        case 2 :
                            // InternalESAML.g:2047:6: this_IMPLNAME_7= RULE_IMPLNAME
                            {
                            this_IMPLNAME_7=(Token)match(input,RULE_IMPLNAME,FOLLOW_32); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(this_IMPLNAME_7, grammarAccess.getConstraintAccess().getIMPLNAMETerminalRuleCall_1_2_0_1());
                              					
                            }

                            }
                            break;

                    }

                    // InternalESAML.g:2052:5: (otherlv_8= 'after' | otherlv_9= 'before' )
                    int alt42=2;
                    int LA42_0 = input.LA(1);

                    if ( (LA42_0==48) ) {
                        alt42=1;
                    }
                    else if ( (LA42_0==49) ) {
                        alt42=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 42, 0, input);

                        throw nvae;
                    }
                    switch (alt42) {
                        case 1 :
                            // InternalESAML.g:2053:6: otherlv_8= 'after'
                            {
                            otherlv_8=(Token)match(input,48,FOLLOW_33); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_8, grammarAccess.getConstraintAccess().getAfterKeyword_1_2_1_0());
                              					
                            }

                            }
                            break;
                        case 2 :
                            // InternalESAML.g:2058:6: otherlv_9= 'before'
                            {
                            otherlv_9=(Token)match(input,49,FOLLOW_33); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(otherlv_9, grammarAccess.getConstraintAccess().getBeforeKeyword_1_2_1_1());
                              					
                            }

                            }
                            break;

                    }

                    // InternalESAML.g:2063:5: (this_ID_10= RULE_ID | this_IMPLNAME_11= RULE_IMPLNAME )
                    int alt43=2;
                    int LA43_0 = input.LA(1);

                    if ( (LA43_0==RULE_ID) ) {
                        alt43=1;
                    }
                    else if ( (LA43_0==RULE_IMPLNAME) ) {
                        alt43=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 43, 0, input);

                        throw nvae;
                    }
                    switch (alt43) {
                        case 1 :
                            // InternalESAML.g:2064:6: this_ID_10= RULE_ID
                            {
                            this_ID_10=(Token)match(input,RULE_ID,FOLLOW_12); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(this_ID_10, grammarAccess.getConstraintAccess().getIDTerminalRuleCall_1_2_2_0());
                              					
                            }

                            }
                            break;
                        case 2 :
                            // InternalESAML.g:2069:6: this_IMPLNAME_11= RULE_IMPLNAME
                            {
                            this_IMPLNAME_11=(Token)match(input,RULE_IMPLNAME,FOLLOW_12); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						newLeafNode(this_IMPLNAME_11, grammarAccess.getConstraintAccess().getIMPLNAMETerminalRuleCall_1_2_2_1());
                              					
                            }

                            }
                            break;

                    }

                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getConstraintAccess().getNumericValueParserRuleCall_1_2_3());
                      				
                    }
                    pushFollow(FOLLOW_13);
                    ruleNumericValue();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					afterParserOrEnumRuleCall();
                      				
                    }
                    otherlv_13=(Token)match(input,30,FOLLOW_31); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_13, grammarAccess.getConstraintAccess().getMsKeyword_1_2_4());
                      				
                    }

                    }


                    }
                    break;

            }

            otherlv_14=(Token)match(input,50,FOLLOW_33); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_14, grammarAccess.getConstraintAccess().getExcuteKeyword_2());
              		
            }
            // InternalESAML.g:2091:3: (this_ID_15= RULE_ID | this_IMPLNAME_16= RULE_IMPLNAME )
            int alt45=2;
            int LA45_0 = input.LA(1);

            if ( (LA45_0==RULE_ID) ) {
                alt45=1;
            }
            else if ( (LA45_0==RULE_IMPLNAME) ) {
                alt45=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 45, 0, input);

                throw nvae;
            }
            switch (alt45) {
                case 1 :
                    // InternalESAML.g:2092:4: this_ID_15= RULE_ID
                    {
                    this_ID_15=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(this_ID_15, grammarAccess.getConstraintAccess().getIDTerminalRuleCall_3_0());
                      			
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:2097:4: this_IMPLNAME_16= RULE_IMPLNAME
                    {
                    this_IMPLNAME_16=(Token)match(input,RULE_IMPLNAME,FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(this_IMPLNAME_16, grammarAccess.getConstraintAccess().getIMPLNAMETerminalRuleCall_3_1());
                      			
                    }

                    }
                    break;

            }

            otherlv_17=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_17, grammarAccess.getConstraintAccess().getSemicolonKeyword_4());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleConstraint"


    // $ANTLR start "entryRuleAddressBinding"
    // InternalESAML.g:2110:1: entryRuleAddressBinding returns [EObject current=null] : iv_ruleAddressBinding= ruleAddressBinding EOF ;
    public final EObject entryRuleAddressBinding() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAddressBinding = null;


        try {
            // InternalESAML.g:2110:55: (iv_ruleAddressBinding= ruleAddressBinding EOF )
            // InternalESAML.g:2111:2: iv_ruleAddressBinding= ruleAddressBinding EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAddressBindingRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleAddressBinding=ruleAddressBinding();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAddressBinding; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAddressBinding"


    // $ANTLR start "ruleAddressBinding"
    // InternalESAML.g:2117:1: ruleAddressBinding returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= ':' ( (lv_address_2_0= RULE_HEXADECIMAL ) ) otherlv_3= ';' ) ;
    public final EObject ruleAddressBinding() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_address_2_0=null;
        Token otherlv_3=null;


        	enterRule();

        try {
            // InternalESAML.g:2123:2: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= ':' ( (lv_address_2_0= RULE_HEXADECIMAL ) ) otherlv_3= ';' ) )
            // InternalESAML.g:2124:2: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= ':' ( (lv_address_2_0= RULE_HEXADECIMAL ) ) otherlv_3= ';' )
            {
            // InternalESAML.g:2124:2: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= ':' ( (lv_address_2_0= RULE_HEXADECIMAL ) ) otherlv_3= ';' )
            // InternalESAML.g:2125:3: ( (otherlv_0= RULE_ID ) ) otherlv_1= ':' ( (lv_address_2_0= RULE_HEXADECIMAL ) ) otherlv_3= ';'
            {
            // InternalESAML.g:2125:3: ( (otherlv_0= RULE_ID ) )
            // InternalESAML.g:2126:4: (otherlv_0= RULE_ID )
            {
            // InternalESAML.g:2126:4: (otherlv_0= RULE_ID )
            // InternalESAML.g:2127:5: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAddressBindingRule());
              					}
              				
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_34); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_0, grammarAccess.getAddressBindingAccess().getVariableNameVariableCrossReference_0_0());
              				
            }

            }


            }

            otherlv_1=(Token)match(input,51,FOLLOW_35); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getAddressBindingAccess().getColonKeyword_1());
              		
            }
            // InternalESAML.g:2142:3: ( (lv_address_2_0= RULE_HEXADECIMAL ) )
            // InternalESAML.g:2143:4: (lv_address_2_0= RULE_HEXADECIMAL )
            {
            // InternalESAML.g:2143:4: (lv_address_2_0= RULE_HEXADECIMAL )
            // InternalESAML.g:2144:5: lv_address_2_0= RULE_HEXADECIMAL
            {
            lv_address_2_0=(Token)match(input,RULE_HEXADECIMAL,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_address_2_0, grammarAccess.getAddressBindingAccess().getAddressHEXADECIMALTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAddressBindingRule());
              					}
              					setWithLastConsumed(
              						current,
              						"address",
              						lv_address_2_0,
              						"com.peppa.xtext.esaml.ESAML.HEXADECIMAL");
              				
            }

            }


            }

            otherlv_3=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getAddressBindingAccess().getSemicolonKeyword_3());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAddressBinding"


    // $ANTLR start "entryRuleSubSystemSubComponent"
    // InternalESAML.g:2168:1: entryRuleSubSystemSubComponent returns [EObject current=null] : iv_ruleSubSystemSubComponent= ruleSubSystemSubComponent EOF ;
    public final EObject entryRuleSubSystemSubComponent() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSubSystemSubComponent = null;


        try {
            // InternalESAML.g:2168:62: (iv_ruleSubSystemSubComponent= ruleSubSystemSubComponent EOF )
            // InternalESAML.g:2169:2: iv_ruleSubSystemSubComponent= ruleSubSystemSubComponent EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSubSystemSubComponentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSubSystemSubComponent=ruleSubSystemSubComponent();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSubSystemSubComponent; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSubSystemSubComponent"


    // $ANTLR start "ruleSubSystemSubComponent"
    // InternalESAML.g:2175:1: ruleSubSystemSubComponent returns [EObject current=null] : (otherlv_0= 'subsystem' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) ) ;
    public final EObject ruleSubSystemSubComponent() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;


        	enterRule();

        try {
            // InternalESAML.g:2181:2: ( (otherlv_0= 'subsystem' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) ) )
            // InternalESAML.g:2182:2: (otherlv_0= 'subsystem' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) )
            {
            // InternalESAML.g:2182:2: (otherlv_0= 'subsystem' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) )
            // InternalESAML.g:2183:3: otherlv_0= 'subsystem' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' )
            {
            otherlv_0=(Token)match(input,37,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getSubSystemSubComponentAccess().getSubsystemKeyword_0());
              		
            }
            // InternalESAML.g:2187:3: ( (otherlv_1= RULE_ID ) )
            // InternalESAML.g:2188:4: (otherlv_1= RULE_ID )
            {
            // InternalESAML.g:2188:4: (otherlv_1= RULE_ID )
            // InternalESAML.g:2189:5: otherlv_1= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSubSystemSubComponentRule());
              					}
              				
            }
            otherlv_1=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_1, grammarAccess.getSubSystemSubComponentAccess().getSubSystemSubComponentTypeSubSystemTypeCrossReference_1_0());
              				
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getSubSystemSubComponentAccess().getFullStopKeyword_2());
              		
            }
            // InternalESAML.g:2204:3: ( (otherlv_3= RULE_ID ) )
            // InternalESAML.g:2205:4: (otherlv_3= RULE_ID )
            {
            // InternalESAML.g:2205:4: (otherlv_3= RULE_ID )
            // InternalESAML.g:2206:5: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSubSystemSubComponentRule());
              					}
              				
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_3, grammarAccess.getSubSystemSubComponentAccess().getSubSystemSubComponentImplSubSystemImplCrossReference_3_0());
              				
            }

            }


            }

            // InternalESAML.g:2217:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalESAML.g:2218:4: (lv_name_4_0= RULE_ID )
            {
            // InternalESAML.g:2218:4: (lv_name_4_0= RULE_ID )
            // InternalESAML.g:2219:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getSubSystemSubComponentAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSubSystemSubComponentRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:2235:3: ( ( ';' )=>otherlv_5= ';' )
            // InternalESAML.g:2236:4: ( ';' )=>otherlv_5= ';'
            {
            otherlv_5=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_5, grammarAccess.getSubSystemSubComponentAccess().getSemicolonKeyword_5());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSubSystemSubComponent"


    // $ANTLR start "entryRuleDataSubComponent"
    // InternalESAML.g:2246:1: entryRuleDataSubComponent returns [EObject current=null] : iv_ruleDataSubComponent= ruleDataSubComponent EOF ;
    public final EObject entryRuleDataSubComponent() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDataSubComponent = null;


        try {
            // InternalESAML.g:2246:57: (iv_ruleDataSubComponent= ruleDataSubComponent EOF )
            // InternalESAML.g:2247:2: iv_ruleDataSubComponent= ruleDataSubComponent EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDataSubComponentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDataSubComponent=ruleDataSubComponent();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDataSubComponent; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDataSubComponent"


    // $ANTLR start "ruleDataSubComponent"
    // InternalESAML.g:2253:1: ruleDataSubComponent returns [EObject current=null] : (otherlv_0= 'data' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) ) ;
    public final EObject ruleDataSubComponent() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;


        	enterRule();

        try {
            // InternalESAML.g:2259:2: ( (otherlv_0= 'data' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) ) )
            // InternalESAML.g:2260:2: (otherlv_0= 'data' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) )
            {
            // InternalESAML.g:2260:2: (otherlv_0= 'data' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) )
            // InternalESAML.g:2261:3: otherlv_0= 'data' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' )
            {
            otherlv_0=(Token)match(input,25,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDataSubComponentAccess().getDataKeyword_0());
              		
            }
            // InternalESAML.g:2265:3: ( (otherlv_1= RULE_ID ) )
            // InternalESAML.g:2266:4: (otherlv_1= RULE_ID )
            {
            // InternalESAML.g:2266:4: (otherlv_1= RULE_ID )
            // InternalESAML.g:2267:5: otherlv_1= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDataSubComponentRule());
              					}
              				
            }
            otherlv_1=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_1, grammarAccess.getDataSubComponentAccess().getDataSubComponentTypeDataComponentTypeCrossReference_1_0());
              				
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getDataSubComponentAccess().getFullStopKeyword_2());
              		
            }
            // InternalESAML.g:2282:3: ( (otherlv_3= RULE_ID ) )
            // InternalESAML.g:2283:4: (otherlv_3= RULE_ID )
            {
            // InternalESAML.g:2283:4: (otherlv_3= RULE_ID )
            // InternalESAML.g:2284:5: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDataSubComponentRule());
              					}
              				
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_3, grammarAccess.getDataSubComponentAccess().getDataSubComponentImplDataComponentImplCrossReference_3_0());
              				
            }

            }


            }

            // InternalESAML.g:2295:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalESAML.g:2296:4: (lv_name_4_0= RULE_ID )
            {
            // InternalESAML.g:2296:4: (lv_name_4_0= RULE_ID )
            // InternalESAML.g:2297:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getDataSubComponentAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDataSubComponentRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:2313:3: ( ( ';' )=>otherlv_5= ';' )
            // InternalESAML.g:2314:4: ( ';' )=>otherlv_5= ';'
            {
            otherlv_5=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_5, grammarAccess.getDataSubComponentAccess().getSemicolonKeyword_5());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDataSubComponent"


    // $ANTLR start "entryRuleTimeTriggerSubComponent"
    // InternalESAML.g:2324:1: entryRuleTimeTriggerSubComponent returns [EObject current=null] : iv_ruleTimeTriggerSubComponent= ruleTimeTriggerSubComponent EOF ;
    public final EObject entryRuleTimeTriggerSubComponent() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTimeTriggerSubComponent = null;


        try {
            // InternalESAML.g:2324:64: (iv_ruleTimeTriggerSubComponent= ruleTimeTriggerSubComponent EOF )
            // InternalESAML.g:2325:2: iv_ruleTimeTriggerSubComponent= ruleTimeTriggerSubComponent EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTimeTriggerSubComponentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleTimeTriggerSubComponent=ruleTimeTriggerSubComponent();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTimeTriggerSubComponent; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTimeTriggerSubComponent"


    // $ANTLR start "ruleTimeTriggerSubComponent"
    // InternalESAML.g:2331:1: ruleTimeTriggerSubComponent returns [EObject current=null] : (otherlv_0= 'timetrigger' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) ) ;
    public final EObject ruleTimeTriggerSubComponent() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;


        	enterRule();

        try {
            // InternalESAML.g:2337:2: ( (otherlv_0= 'timetrigger' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) ) )
            // InternalESAML.g:2338:2: (otherlv_0= 'timetrigger' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) )
            {
            // InternalESAML.g:2338:2: (otherlv_0= 'timetrigger' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) )
            // InternalESAML.g:2339:3: otherlv_0= 'timetrigger' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' )
            {
            otherlv_0=(Token)match(input,43,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getTimeTriggerSubComponentAccess().getTimetriggerKeyword_0());
              		
            }
            // InternalESAML.g:2343:3: ( (otherlv_1= RULE_ID ) )
            // InternalESAML.g:2344:4: (otherlv_1= RULE_ID )
            {
            // InternalESAML.g:2344:4: (otherlv_1= RULE_ID )
            // InternalESAML.g:2345:5: otherlv_1= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getTimeTriggerSubComponentRule());
              					}
              				
            }
            otherlv_1=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_1, grammarAccess.getTimeTriggerSubComponentAccess().getTimeTriggerSubComponentTypeTimeTriggerTypeCrossReference_1_0());
              				
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getTimeTriggerSubComponentAccess().getFullStopKeyword_2());
              		
            }
            // InternalESAML.g:2360:3: ( (otherlv_3= RULE_ID ) )
            // InternalESAML.g:2361:4: (otherlv_3= RULE_ID )
            {
            // InternalESAML.g:2361:4: (otherlv_3= RULE_ID )
            // InternalESAML.g:2362:5: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getTimeTriggerSubComponentRule());
              					}
              				
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_3, grammarAccess.getTimeTriggerSubComponentAccess().getTimeTriggerSubComponentImplTimeTriggerImplCrossReference_3_0());
              				
            }

            }


            }

            // InternalESAML.g:2373:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalESAML.g:2374:4: (lv_name_4_0= RULE_ID )
            {
            // InternalESAML.g:2374:4: (lv_name_4_0= RULE_ID )
            // InternalESAML.g:2375:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getTimeTriggerSubComponentAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getTimeTriggerSubComponentRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:2391:3: ( ( ';' )=>otherlv_5= ';' )
            // InternalESAML.g:2392:4: ( ';' )=>otherlv_5= ';'
            {
            otherlv_5=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_5, grammarAccess.getTimeTriggerSubComponentAccess().getSemicolonKeyword_5());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTimeTriggerSubComponent"


    // $ANTLR start "entryRuleMonitorSubComponent"
    // InternalESAML.g:2402:1: entryRuleMonitorSubComponent returns [EObject current=null] : iv_ruleMonitorSubComponent= ruleMonitorSubComponent EOF ;
    public final EObject entryRuleMonitorSubComponent() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMonitorSubComponent = null;


        try {
            // InternalESAML.g:2402:60: (iv_ruleMonitorSubComponent= ruleMonitorSubComponent EOF )
            // InternalESAML.g:2403:2: iv_ruleMonitorSubComponent= ruleMonitorSubComponent EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMonitorSubComponentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleMonitorSubComponent=ruleMonitorSubComponent();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMonitorSubComponent; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMonitorSubComponent"


    // $ANTLR start "ruleMonitorSubComponent"
    // InternalESAML.g:2409:1: ruleMonitorSubComponent returns [EObject current=null] : (otherlv_0= 'monitor' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) ) ;
    public final EObject ruleMonitorSubComponent() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;


        	enterRule();

        try {
            // InternalESAML.g:2415:2: ( (otherlv_0= 'monitor' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) ) )
            // InternalESAML.g:2416:2: (otherlv_0= 'monitor' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) )
            {
            // InternalESAML.g:2416:2: (otherlv_0= 'monitor' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' ) )
            // InternalESAML.g:2417:3: otherlv_0= 'monitor' ( (otherlv_1= RULE_ID ) ) otherlv_2= '.' ( (otherlv_3= RULE_ID ) ) ( (lv_name_4_0= RULE_ID ) ) ( ( ';' )=>otherlv_5= ';' )
            {
            otherlv_0=(Token)match(input,44,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getMonitorSubComponentAccess().getMonitorKeyword_0());
              		
            }
            // InternalESAML.g:2421:3: ( (otherlv_1= RULE_ID ) )
            // InternalESAML.g:2422:4: (otherlv_1= RULE_ID )
            {
            // InternalESAML.g:2422:4: (otherlv_1= RULE_ID )
            // InternalESAML.g:2423:5: otherlv_1= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getMonitorSubComponentRule());
              					}
              				
            }
            otherlv_1=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_1, grammarAccess.getMonitorSubComponentAccess().getMonitorSubComponentTypeMonitorTypeCrossReference_1_0());
              				
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getMonitorSubComponentAccess().getFullStopKeyword_2());
              		
            }
            // InternalESAML.g:2438:3: ( (otherlv_3= RULE_ID ) )
            // InternalESAML.g:2439:4: (otherlv_3= RULE_ID )
            {
            // InternalESAML.g:2439:4: (otherlv_3= RULE_ID )
            // InternalESAML.g:2440:5: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getMonitorSubComponentRule());
              					}
              				
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_3, grammarAccess.getMonitorSubComponentAccess().getMonitorSubComponentImplMonitorImplCrossReference_3_0());
              				
            }

            }


            }

            // InternalESAML.g:2451:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalESAML.g:2452:4: (lv_name_4_0= RULE_ID )
            {
            // InternalESAML.g:2452:4: (lv_name_4_0= RULE_ID )
            // InternalESAML.g:2453:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getMonitorSubComponentAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getMonitorSubComponentRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:2469:3: ( ( ';' )=>otherlv_5= ';' )
            // InternalESAML.g:2470:4: ( ';' )=>otherlv_5= ';'
            {
            otherlv_5=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_5, grammarAccess.getMonitorSubComponentAccess().getSemicolonKeyword_5());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMonitorSubComponent"


    // $ANTLR start "entryRuleActivitySubComponent"
    // InternalESAML.g:2480:1: entryRuleActivitySubComponent returns [EObject current=null] : iv_ruleActivitySubComponent= ruleActivitySubComponent EOF ;
    public final EObject entryRuleActivitySubComponent() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleActivitySubComponent = null;


        try {
            // InternalESAML.g:2480:61: (iv_ruleActivitySubComponent= ruleActivitySubComponent EOF )
            // InternalESAML.g:2481:2: iv_ruleActivitySubComponent= ruleActivitySubComponent EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getActivitySubComponentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleActivitySubComponent=ruleActivitySubComponent();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleActivitySubComponent; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleActivitySubComponent"


    // $ANTLR start "ruleActivitySubComponent"
    // InternalESAML.g:2487:1: ruleActivitySubComponent returns [EObject current=null] : ( ( (lv_isInitActivity_0_0= 'initact' ) )? otherlv_1= 'activity' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) ) ;
    public final EObject ruleActivitySubComponent() throws RecognitionException {
        EObject current = null;

        Token lv_isInitActivity_0_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token lv_name_5_0=null;
        Token otherlv_6=null;


        	enterRule();

        try {
            // InternalESAML.g:2493:2: ( ( ( (lv_isInitActivity_0_0= 'initact' ) )? otherlv_1= 'activity' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) ) )
            // InternalESAML.g:2494:2: ( ( (lv_isInitActivity_0_0= 'initact' ) )? otherlv_1= 'activity' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) )
            {
            // InternalESAML.g:2494:2: ( ( (lv_isInitActivity_0_0= 'initact' ) )? otherlv_1= 'activity' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) )
            // InternalESAML.g:2495:3: ( (lv_isInitActivity_0_0= 'initact' ) )? otherlv_1= 'activity' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' )
            {
            // InternalESAML.g:2495:3: ( (lv_isInitActivity_0_0= 'initact' ) )?
            int alt46=2;
            int LA46_0 = input.LA(1);

            if ( (LA46_0==53) ) {
                alt46=1;
            }
            switch (alt46) {
                case 1 :
                    // InternalESAML.g:2496:4: (lv_isInitActivity_0_0= 'initact' )
                    {
                    // InternalESAML.g:2496:4: (lv_isInitActivity_0_0= 'initact' )
                    // InternalESAML.g:2497:5: lv_isInitActivity_0_0= 'initact'
                    {
                    lv_isInitActivity_0_0=(Token)match(input,53,FOLLOW_24); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_isInitActivity_0_0, grammarAccess.getActivitySubComponentAccess().getIsInitActivityInitactKeyword_0_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getActivitySubComponentRule());
                      					}
                      					setWithLastConsumed(current, "isInitActivity", lv_isInitActivity_0_0 != null, "initact");
                      				
                    }

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,38,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getActivitySubComponentAccess().getActivityKeyword_1());
              		
            }
            // InternalESAML.g:2513:3: ( (otherlv_2= RULE_ID ) )
            // InternalESAML.g:2514:4: (otherlv_2= RULE_ID )
            {
            // InternalESAML.g:2514:4: (otherlv_2= RULE_ID )
            // InternalESAML.g:2515:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getActivitySubComponentRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getActivitySubComponentAccess().getActivitySubComponentTypeActivityTypeCrossReference_2_0());
              				
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getActivitySubComponentAccess().getFullStopKeyword_3());
              		
            }
            // InternalESAML.g:2530:3: ( (otherlv_4= RULE_ID ) )
            // InternalESAML.g:2531:4: (otherlv_4= RULE_ID )
            {
            // InternalESAML.g:2531:4: (otherlv_4= RULE_ID )
            // InternalESAML.g:2532:5: otherlv_4= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getActivitySubComponentRule());
              					}
              				
            }
            otherlv_4=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_4, grammarAccess.getActivitySubComponentAccess().getActivitySubComponentImplActivityImplCrossReference_4_0());
              				
            }

            }


            }

            // InternalESAML.g:2543:3: ( (lv_name_5_0= RULE_ID ) )
            // InternalESAML.g:2544:4: (lv_name_5_0= RULE_ID )
            {
            // InternalESAML.g:2544:4: (lv_name_5_0= RULE_ID )
            // InternalESAML.g:2545:5: lv_name_5_0= RULE_ID
            {
            lv_name_5_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_5_0, grammarAccess.getActivitySubComponentAccess().getNameIDTerminalRuleCall_5_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getActivitySubComponentRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_5_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:2561:3: ( ( ';' )=>otherlv_6= ';' )
            // InternalESAML.g:2562:4: ( ';' )=>otherlv_6= ';'
            {
            otherlv_6=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_6, grammarAccess.getActivitySubComponentAccess().getSemicolonKeyword_6());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleActivitySubComponent"


    // $ANTLR start "entryRuleStateSubComponent"
    // InternalESAML.g:2572:1: entryRuleStateSubComponent returns [EObject current=null] : iv_ruleStateSubComponent= ruleStateSubComponent EOF ;
    public final EObject entryRuleStateSubComponent() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStateSubComponent = null;


        try {
            // InternalESAML.g:2572:58: (iv_ruleStateSubComponent= ruleStateSubComponent EOF )
            // InternalESAML.g:2573:2: iv_ruleStateSubComponent= ruleStateSubComponent EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getStateSubComponentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleStateSubComponent=ruleStateSubComponent();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleStateSubComponent; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleStateSubComponent"


    // $ANTLR start "ruleStateSubComponent"
    // InternalESAML.g:2579:1: ruleStateSubComponent returns [EObject current=null] : ( ( (lv_isInitState_0_0= 'initstate' ) )? otherlv_1= 'state' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) ) ;
    public final EObject ruleStateSubComponent() throws RecognitionException {
        EObject current = null;

        Token lv_isInitState_0_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token lv_name_5_0=null;
        Token otherlv_6=null;


        	enterRule();

        try {
            // InternalESAML.g:2585:2: ( ( ( (lv_isInitState_0_0= 'initstate' ) )? otherlv_1= 'state' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) ) )
            // InternalESAML.g:2586:2: ( ( (lv_isInitState_0_0= 'initstate' ) )? otherlv_1= 'state' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) )
            {
            // InternalESAML.g:2586:2: ( ( (lv_isInitState_0_0= 'initstate' ) )? otherlv_1= 'state' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' ) )
            // InternalESAML.g:2587:3: ( (lv_isInitState_0_0= 'initstate' ) )? otherlv_1= 'state' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (otherlv_4= RULE_ID ) ) ( (lv_name_5_0= RULE_ID ) ) ( ( ';' )=>otherlv_6= ';' )
            {
            // InternalESAML.g:2587:3: ( (lv_isInitState_0_0= 'initstate' ) )?
            int alt47=2;
            int LA47_0 = input.LA(1);

            if ( (LA47_0==54) ) {
                alt47=1;
            }
            switch (alt47) {
                case 1 :
                    // InternalESAML.g:2588:4: (lv_isInitState_0_0= 'initstate' )
                    {
                    // InternalESAML.g:2588:4: (lv_isInitState_0_0= 'initstate' )
                    // InternalESAML.g:2589:5: lv_isInitState_0_0= 'initstate'
                    {
                    lv_isInitState_0_0=(Token)match(input,54,FOLLOW_37); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_isInitState_0_0, grammarAccess.getStateSubComponentAccess().getIsInitStateInitstateKeyword_0_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getStateSubComponentRule());
                      					}
                      					setWithLastConsumed(current, "isInitState", lv_isInitState_0_0 != null, "initstate");
                      				
                    }

                    }


                    }
                    break;

            }

            otherlv_1=(Token)match(input,42,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getStateSubComponentAccess().getStateKeyword_1());
              		
            }
            // InternalESAML.g:2605:3: ( (otherlv_2= RULE_ID ) )
            // InternalESAML.g:2606:4: (otherlv_2= RULE_ID )
            {
            // InternalESAML.g:2606:4: (otherlv_2= RULE_ID )
            // InternalESAML.g:2607:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getStateSubComponentRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getStateSubComponentAccess().getStateSubComponentTypeStateTypeCrossReference_2_0());
              				
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getStateSubComponentAccess().getFullStopKeyword_3());
              		
            }
            // InternalESAML.g:2622:3: ( (otherlv_4= RULE_ID ) )
            // InternalESAML.g:2623:4: (otherlv_4= RULE_ID )
            {
            // InternalESAML.g:2623:4: (otherlv_4= RULE_ID )
            // InternalESAML.g:2624:5: otherlv_4= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getStateSubComponentRule());
              					}
              				
            }
            otherlv_4=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_4, grammarAccess.getStateSubComponentAccess().getStateSubComponentImplStateImplCrossReference_4_0());
              				
            }

            }


            }

            // InternalESAML.g:2635:3: ( (lv_name_5_0= RULE_ID ) )
            // InternalESAML.g:2636:4: (lv_name_5_0= RULE_ID )
            {
            // InternalESAML.g:2636:4: (lv_name_5_0= RULE_ID )
            // InternalESAML.g:2637:5: lv_name_5_0= RULE_ID
            {
            lv_name_5_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_5_0, grammarAccess.getStateSubComponentAccess().getNameIDTerminalRuleCall_5_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getStateSubComponentRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_5_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:2653:3: ( ( ';' )=>otherlv_6= ';' )
            // InternalESAML.g:2654:4: ( ';' )=>otherlv_6= ';'
            {
            otherlv_6=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_6, grammarAccess.getStateSubComponentAccess().getSemicolonKeyword_6());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleStateSubComponent"


    // $ANTLR start "entryRuleChannel"
    // InternalESAML.g:2664:1: entryRuleChannel returns [EObject current=null] : iv_ruleChannel= ruleChannel EOF ;
    public final EObject entryRuleChannel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleChannel = null;


        try {
            // InternalESAML.g:2664:48: (iv_ruleChannel= ruleChannel EOF )
            // InternalESAML.g:2665:2: iv_ruleChannel= ruleChannel EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getChannelRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleChannel=ruleChannel();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleChannel; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleChannel"


    // $ANTLR start "ruleChannel"
    // InternalESAML.g:2671:1: ruleChannel returns [EObject current=null] : (this_PortChannel_0= rulePortChannel | this_AccessChannel_1= ruleAccessChannel | this_SelfPortChannel_2= ruleSelfPortChannel | this_SelfAccessChannel_3= ruleSelfAccessChannel ) ;
    public final EObject ruleChannel() throws RecognitionException {
        EObject current = null;

        EObject this_PortChannel_0 = null;

        EObject this_AccessChannel_1 = null;

        EObject this_SelfPortChannel_2 = null;

        EObject this_SelfAccessChannel_3 = null;



        	enterRule();

        try {
            // InternalESAML.g:2677:2: ( (this_PortChannel_0= rulePortChannel | this_AccessChannel_1= ruleAccessChannel | this_SelfPortChannel_2= ruleSelfPortChannel | this_SelfAccessChannel_3= ruleSelfAccessChannel ) )
            // InternalESAML.g:2678:2: (this_PortChannel_0= rulePortChannel | this_AccessChannel_1= ruleAccessChannel | this_SelfPortChannel_2= ruleSelfPortChannel | this_SelfAccessChannel_3= ruleSelfAccessChannel )
            {
            // InternalESAML.g:2678:2: (this_PortChannel_0= rulePortChannel | this_AccessChannel_1= ruleAccessChannel | this_SelfPortChannel_2= ruleSelfPortChannel | this_SelfAccessChannel_3= ruleSelfAccessChannel )
            int alt48=4;
            alt48 = dfa48.predict(input);
            switch (alt48) {
                case 1 :
                    // InternalESAML.g:2679:3: this_PortChannel_0= rulePortChannel
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getChannelAccess().getPortChannelParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_PortChannel_0=rulePortChannel();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_PortChannel_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:2688:3: this_AccessChannel_1= ruleAccessChannel
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getChannelAccess().getAccessChannelParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_AccessChannel_1=ruleAccessChannel();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_AccessChannel_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:2697:3: this_SelfPortChannel_2= ruleSelfPortChannel
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getChannelAccess().getSelfPortChannelParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_SelfPortChannel_2=ruleSelfPortChannel();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_SelfPortChannel_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalESAML.g:2706:3: this_SelfAccessChannel_3= ruleSelfAccessChannel
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getChannelAccess().getSelfAccessChannelParserRuleCall_3());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_SelfAccessChannel_3=ruleSelfAccessChannel();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_SelfAccessChannel_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleChannel"


    // $ANTLR start "entryRulePortChannel"
    // InternalESAML.g:2718:1: entryRulePortChannel returns [EObject current=null] : iv_rulePortChannel= rulePortChannel EOF ;
    public final EObject entryRulePortChannel() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePortChannel = null;


        try {
            // InternalESAML.g:2718:52: (iv_rulePortChannel= rulePortChannel EOF )
            // InternalESAML.g:2719:2: iv_rulePortChannel= rulePortChannel EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPortChannelRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_rulePortChannel=rulePortChannel();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePortChannel; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePortChannel"


    // $ANTLR start "rulePortChannel"
    // InternalESAML.g:2725:1: rulePortChannel returns [EObject current=null] : ( () ( ( (lv_portchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= RULE_ID ) ) otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '<-' | otherlv_12= '->' | otherlv_13= '<->' ) ( (otherlv_14= RULE_ID ) ) otherlv_15= '.' ( (otherlv_16= RULE_ID ) ) ( ( ';' )=>otherlv_17= ';' ) ) ) ;
    public final EObject rulePortChannel() throws RecognitionException {
        EObject current = null;

        Token lv_portchannelName_1_0=null;
        Token otherlv_2=null;
        Token lv_variableName_3_0=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        AntlrDatatypeRuleToken lv_portType_6_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:2731:2: ( ( () ( ( (lv_portchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= RULE_ID ) ) otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '<-' | otherlv_12= '->' | otherlv_13= '<->' ) ( (otherlv_14= RULE_ID ) ) otherlv_15= '.' ( (otherlv_16= RULE_ID ) ) ( ( ';' )=>otherlv_17= ';' ) ) ) )
            // InternalESAML.g:2732:2: ( () ( ( (lv_portchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= RULE_ID ) ) otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '<-' | otherlv_12= '->' | otherlv_13= '<->' ) ( (otherlv_14= RULE_ID ) ) otherlv_15= '.' ( (otherlv_16= RULE_ID ) ) ( ( ';' )=>otherlv_17= ';' ) ) )
            {
            // InternalESAML.g:2732:2: ( () ( ( (lv_portchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= RULE_ID ) ) otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '<-' | otherlv_12= '->' | otherlv_13= '<->' ) ( (otherlv_14= RULE_ID ) ) otherlv_15= '.' ( (otherlv_16= RULE_ID ) ) ( ( ';' )=>otherlv_17= ';' ) ) )
            // InternalESAML.g:2733:3: () ( ( (lv_portchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= RULE_ID ) ) otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '<-' | otherlv_12= '->' | otherlv_13= '<->' ) ( (otherlv_14= RULE_ID ) ) otherlv_15= '.' ( (otherlv_16= RULE_ID ) ) ( ( ';' )=>otherlv_17= ';' ) )
            {
            // InternalESAML.g:2733:3: ()
            // InternalESAML.g:2734:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getPortChannelAccess().getPortChannelAction_0(),
              					current);
              			
            }

            }

            // InternalESAML.g:2740:3: ( ( (lv_portchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= RULE_ID ) ) otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '<-' | otherlv_12= '->' | otherlv_13= '<->' ) ( (otherlv_14= RULE_ID ) ) otherlv_15= '.' ( (otherlv_16= RULE_ID ) ) ( ( ';' )=>otherlv_17= ';' ) )
            // InternalESAML.g:2741:4: ( (lv_portchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= RULE_ID ) ) otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '<-' | otherlv_12= '->' | otherlv_13= '<->' ) ( (otherlv_14= RULE_ID ) ) otherlv_15= '.' ( (otherlv_16= RULE_ID ) ) ( ( ';' )=>otherlv_17= ';' )
            {
            // InternalESAML.g:2741:4: ( (lv_portchannelName_1_0= RULE_ID ) )
            // InternalESAML.g:2742:5: (lv_portchannelName_1_0= RULE_ID )
            {
            // InternalESAML.g:2742:5: (lv_portchannelName_1_0= RULE_ID )
            // InternalESAML.g:2743:6: lv_portchannelName_1_0= RULE_ID
            {
            lv_portchannelName_1_0=(Token)match(input,RULE_ID,FOLLOW_38); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(lv_portchannelName_1_0, grammarAccess.getPortChannelAccess().getPortchannelNameIDTerminalRuleCall_1_0_0());
              					
            }
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getPortChannelRule());
              						}
              						setWithLastConsumed(
              							current,
              							"portchannelName",
              							lv_portchannelName_1_0,
              							"org.eclipse.xtext.common.Terminals.ID");
              					
            }

            }


            }

            otherlv_2=(Token)match(input,55,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_2, grammarAccess.getPortChannelAccess().getLeftSquareBracketKeyword_1_1());
              			
            }
            // InternalESAML.g:2763:4: ( (lv_variableName_3_0= RULE_ID ) )
            // InternalESAML.g:2764:5: (lv_variableName_3_0= RULE_ID )
            {
            // InternalESAML.g:2764:5: (lv_variableName_3_0= RULE_ID )
            // InternalESAML.g:2765:6: lv_variableName_3_0= RULE_ID
            {
            lv_variableName_3_0=(Token)match(input,RULE_ID,FOLLOW_39); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(lv_variableName_3_0, grammarAccess.getPortChannelAccess().getVariableNameIDTerminalRuleCall_1_2_0());
              					
            }
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getPortChannelRule());
              						}
              						setWithLastConsumed(
              							current,
              							"variableName",
              							lv_variableName_3_0,
              							"org.eclipse.xtext.common.Terminals.ID");
              					
            }

            }


            }

            otherlv_4=(Token)match(input,56,FOLLOW_34); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_4, grammarAccess.getPortChannelAccess().getRightSquareBracketKeyword_1_3());
              			
            }
            otherlv_5=(Token)match(input,51,FOLLOW_6); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_5, grammarAccess.getPortChannelAccess().getColonKeyword_1_4());
              			
            }
            // InternalESAML.g:2789:4: ( (lv_portType_6_0= rulePortType ) )
            // InternalESAML.g:2790:5: (lv_portType_6_0= rulePortType )
            {
            // InternalESAML.g:2790:5: (lv_portType_6_0= rulePortType )
            // InternalESAML.g:2791:6: lv_portType_6_0= rulePortType
            {
            if ( state.backtracking==0 ) {

              						newCompositeNode(grammarAccess.getPortChannelAccess().getPortTypePortTypeParserRuleCall_1_5_0());
              					
            }
            pushFollow(FOLLOW_7);
            lv_portType_6_0=rulePortType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElementForParent(grammarAccess.getPortChannelRule());
              						}
              						set(
              							current,
              							"portType",
              							lv_portType_6_0,
              							"com.peppa.xtext.esaml.ESAML.PortType");
              						afterParserOrEnumRuleCall();
              					
            }

            }


            }

            otherlv_7=(Token)match(input,21,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_7, grammarAccess.getPortChannelAccess().getPortKeyword_1_6());
              			
            }
            // InternalESAML.g:2812:4: ( (otherlv_8= RULE_ID ) )
            // InternalESAML.g:2813:5: (otherlv_8= RULE_ID )
            {
            // InternalESAML.g:2813:5: (otherlv_8= RULE_ID )
            // InternalESAML.g:2814:6: otherlv_8= RULE_ID
            {
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getPortChannelRule());
              						}
              					
            }
            otherlv_8=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(otherlv_8, grammarAccess.getPortChannelAccess().getSourceSubComponentSubComponentCrossReference_1_7_0());
              					
            }

            }


            }

            otherlv_9=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_9, grammarAccess.getPortChannelAccess().getFullStopKeyword_1_8());
              			
            }
            // InternalESAML.g:2829:4: ( (otherlv_10= RULE_ID ) )
            // InternalESAML.g:2830:5: (otherlv_10= RULE_ID )
            {
            // InternalESAML.g:2830:5: (otherlv_10= RULE_ID )
            // InternalESAML.g:2831:6: otherlv_10= RULE_ID
            {
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getPortChannelRule());
              						}
              					
            }
            otherlv_10=(Token)match(input,RULE_ID,FOLLOW_40); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(otherlv_10, grammarAccess.getPortChannelAccess().getSourcePortPortFeatureCrossReference_1_9_0());
              					
            }

            }


            }

            // InternalESAML.g:2842:4: (otherlv_11= '<-' | otherlv_12= '->' | otherlv_13= '<->' )
            int alt49=3;
            switch ( input.LA(1) ) {
            case 57:
                {
                alt49=1;
                }
                break;
            case 35:
                {
                alt49=2;
                }
                break;
            case 58:
                {
                alt49=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 49, 0, input);

                throw nvae;
            }

            switch (alt49) {
                case 1 :
                    // InternalESAML.g:2843:5: otherlv_11= '<-'
                    {
                    otherlv_11=(Token)match(input,57,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_11, grammarAccess.getPortChannelAccess().getLessThanSignHyphenMinusKeyword_1_10_0());
                      				
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:2848:5: otherlv_12= '->'
                    {
                    otherlv_12=(Token)match(input,35,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_12, grammarAccess.getPortChannelAccess().getHyphenMinusGreaterThanSignKeyword_1_10_1());
                      				
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:2853:5: otherlv_13= '<->'
                    {
                    otherlv_13=(Token)match(input,58,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_13, grammarAccess.getPortChannelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_1_10_2());
                      				
                    }

                    }
                    break;

            }

            // InternalESAML.g:2858:4: ( (otherlv_14= RULE_ID ) )
            // InternalESAML.g:2859:5: (otherlv_14= RULE_ID )
            {
            // InternalESAML.g:2859:5: (otherlv_14= RULE_ID )
            // InternalESAML.g:2860:6: otherlv_14= RULE_ID
            {
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getPortChannelRule());
              						}
              					
            }
            otherlv_14=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(otherlv_14, grammarAccess.getPortChannelAccess().getSinkSubComponentSubComponentCrossReference_1_11_0());
              					
            }

            }


            }

            otherlv_15=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_15, grammarAccess.getPortChannelAccess().getFullStopKeyword_1_12());
              			
            }
            // InternalESAML.g:2875:4: ( (otherlv_16= RULE_ID ) )
            // InternalESAML.g:2876:5: (otherlv_16= RULE_ID )
            {
            // InternalESAML.g:2876:5: (otherlv_16= RULE_ID )
            // InternalESAML.g:2877:6: otherlv_16= RULE_ID
            {
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getPortChannelRule());
              						}
              					
            }
            otherlv_16=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(otherlv_16, grammarAccess.getPortChannelAccess().getSinkPortPortFeatureCrossReference_1_13_0());
              					
            }

            }


            }

            // InternalESAML.g:2888:4: ( ( ';' )=>otherlv_17= ';' )
            // InternalESAML.g:2889:5: ( ';' )=>otherlv_17= ';'
            {
            otherlv_17=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_17, grammarAccess.getPortChannelAccess().getSemicolonKeyword_1_14());
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePortChannel"


    // $ANTLR start "entryRuleAccessChannel"
    // InternalESAML.g:2900:1: entryRuleAccessChannel returns [EObject current=null] : iv_ruleAccessChannel= ruleAccessChannel EOF ;
    public final EObject entryRuleAccessChannel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAccessChannel = null;


        try {
            // InternalESAML.g:2900:54: (iv_ruleAccessChannel= ruleAccessChannel EOF )
            // InternalESAML.g:2901:2: iv_ruleAccessChannel= ruleAccessChannel EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAccessChannelRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleAccessChannel=ruleAccessChannel();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAccessChannel; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAccessChannel"


    // $ANTLR start "ruleAccessChannel"
    // InternalESAML.g:2907:1: ruleAccessChannel returns [EObject current=null] : ( ( (lv_accesschannelName_0_0= RULE_ID ) ) otherlv_1= ':' otherlv_2= 'data' otherlv_3= 'access' ( (otherlv_4= RULE_ID ) ) otherlv_5= '.' ( (otherlv_6= RULE_ID ) ) (otherlv_7= '<-' | otherlv_8= '->' | otherlv_9= '<->' ) ( (otherlv_10= RULE_ID ) ) (otherlv_11= '.' (otherlv_12= '[' ( (lv_dataProperties_13_0= RULE_ID ) ) (otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) ) )* otherlv_16= ']' ) )? ( ( ';' )=>otherlv_17= ';' ) ) ;
    public final EObject ruleAccessChannel() throws RecognitionException {
        EObject current = null;

        Token lv_accesschannelName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token lv_dataProperties_13_0=null;
        Token otherlv_14=null;
        Token lv_dataProperties_15_0=null;
        Token otherlv_16=null;
        Token otherlv_17=null;


        	enterRule();

        try {
            // InternalESAML.g:2913:2: ( ( ( (lv_accesschannelName_0_0= RULE_ID ) ) otherlv_1= ':' otherlv_2= 'data' otherlv_3= 'access' ( (otherlv_4= RULE_ID ) ) otherlv_5= '.' ( (otherlv_6= RULE_ID ) ) (otherlv_7= '<-' | otherlv_8= '->' | otherlv_9= '<->' ) ( (otherlv_10= RULE_ID ) ) (otherlv_11= '.' (otherlv_12= '[' ( (lv_dataProperties_13_0= RULE_ID ) ) (otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) ) )* otherlv_16= ']' ) )? ( ( ';' )=>otherlv_17= ';' ) ) )
            // InternalESAML.g:2914:2: ( ( (lv_accesschannelName_0_0= RULE_ID ) ) otherlv_1= ':' otherlv_2= 'data' otherlv_3= 'access' ( (otherlv_4= RULE_ID ) ) otherlv_5= '.' ( (otherlv_6= RULE_ID ) ) (otherlv_7= '<-' | otherlv_8= '->' | otherlv_9= '<->' ) ( (otherlv_10= RULE_ID ) ) (otherlv_11= '.' (otherlv_12= '[' ( (lv_dataProperties_13_0= RULE_ID ) ) (otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) ) )* otherlv_16= ']' ) )? ( ( ';' )=>otherlv_17= ';' ) )
            {
            // InternalESAML.g:2914:2: ( ( (lv_accesschannelName_0_0= RULE_ID ) ) otherlv_1= ':' otherlv_2= 'data' otherlv_3= 'access' ( (otherlv_4= RULE_ID ) ) otherlv_5= '.' ( (otherlv_6= RULE_ID ) ) (otherlv_7= '<-' | otherlv_8= '->' | otherlv_9= '<->' ) ( (otherlv_10= RULE_ID ) ) (otherlv_11= '.' (otherlv_12= '[' ( (lv_dataProperties_13_0= RULE_ID ) ) (otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) ) )* otherlv_16= ']' ) )? ( ( ';' )=>otherlv_17= ';' ) )
            // InternalESAML.g:2915:3: ( (lv_accesschannelName_0_0= RULE_ID ) ) otherlv_1= ':' otherlv_2= 'data' otherlv_3= 'access' ( (otherlv_4= RULE_ID ) ) otherlv_5= '.' ( (otherlv_6= RULE_ID ) ) (otherlv_7= '<-' | otherlv_8= '->' | otherlv_9= '<->' ) ( (otherlv_10= RULE_ID ) ) (otherlv_11= '.' (otherlv_12= '[' ( (lv_dataProperties_13_0= RULE_ID ) ) (otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) ) )* otherlv_16= ']' ) )? ( ( ';' )=>otherlv_17= ';' )
            {
            // InternalESAML.g:2915:3: ( (lv_accesschannelName_0_0= RULE_ID ) )
            // InternalESAML.g:2916:4: (lv_accesschannelName_0_0= RULE_ID )
            {
            // InternalESAML.g:2916:4: (lv_accesschannelName_0_0= RULE_ID )
            // InternalESAML.g:2917:5: lv_accesschannelName_0_0= RULE_ID
            {
            lv_accesschannelName_0_0=(Token)match(input,RULE_ID,FOLLOW_34); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_accesschannelName_0_0, grammarAccess.getAccessChannelAccess().getAccesschannelNameIDTerminalRuleCall_0_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAccessChannelRule());
              					}
              					setWithLastConsumed(
              						current,
              						"accesschannelName",
              						lv_accesschannelName_0_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            otherlv_1=(Token)match(input,51,FOLLOW_10); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getAccessChannelAccess().getColonKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,25,FOLLOW_11); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getAccessChannelAccess().getDataKeyword_2());
              		
            }
            otherlv_3=(Token)match(input,28,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getAccessChannelAccess().getAccessKeyword_3());
              		
            }
            // InternalESAML.g:2945:3: ( (otherlv_4= RULE_ID ) )
            // InternalESAML.g:2946:4: (otherlv_4= RULE_ID )
            {
            // InternalESAML.g:2946:4: (otherlv_4= RULE_ID )
            // InternalESAML.g:2947:5: otherlv_4= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAccessChannelRule());
              					}
              				
            }
            otherlv_4=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_4, grammarAccess.getAccessChannelAccess().getSourceSubComponentSubComponentCrossReference_4_0());
              				
            }

            }


            }

            otherlv_5=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_5, grammarAccess.getAccessChannelAccess().getFullStopKeyword_5());
              		
            }
            // InternalESAML.g:2962:3: ( (otherlv_6= RULE_ID ) )
            // InternalESAML.g:2963:4: (otherlv_6= RULE_ID )
            {
            // InternalESAML.g:2963:4: (otherlv_6= RULE_ID )
            // InternalESAML.g:2964:5: otherlv_6= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAccessChannelRule());
              					}
              				
            }
            otherlv_6=(Token)match(input,RULE_ID,FOLLOW_40); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_6, grammarAccess.getAccessChannelAccess().getSourceAccessAccessFeatureCrossReference_6_0());
              				
            }

            }


            }

            // InternalESAML.g:2975:3: (otherlv_7= '<-' | otherlv_8= '->' | otherlv_9= '<->' )
            int alt50=3;
            switch ( input.LA(1) ) {
            case 57:
                {
                alt50=1;
                }
                break;
            case 35:
                {
                alt50=2;
                }
                break;
            case 58:
                {
                alt50=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 50, 0, input);

                throw nvae;
            }

            switch (alt50) {
                case 1 :
                    // InternalESAML.g:2976:4: otherlv_7= '<-'
                    {
                    otherlv_7=(Token)match(input,57,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_7, grammarAccess.getAccessChannelAccess().getLessThanSignHyphenMinusKeyword_7_0());
                      			
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:2981:4: otherlv_8= '->'
                    {
                    otherlv_8=(Token)match(input,35,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_8, grammarAccess.getAccessChannelAccess().getHyphenMinusGreaterThanSignKeyword_7_1());
                      			
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:2986:4: otherlv_9= '<->'
                    {
                    otherlv_9=(Token)match(input,58,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_9, grammarAccess.getAccessChannelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_7_2());
                      			
                    }

                    }
                    break;

            }

            // InternalESAML.g:2991:3: ( (otherlv_10= RULE_ID ) )
            // InternalESAML.g:2992:4: (otherlv_10= RULE_ID )
            {
            // InternalESAML.g:2992:4: (otherlv_10= RULE_ID )
            // InternalESAML.g:2993:5: otherlv_10= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getAccessChannelRule());
              					}
              				
            }
            otherlv_10=(Token)match(input,RULE_ID,FOLLOW_41); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_10, grammarAccess.getAccessChannelAccess().getDataComponentSubComponentCrossReference_8_0());
              				
            }

            }


            }

            // InternalESAML.g:3004:3: (otherlv_11= '.' (otherlv_12= '[' ( (lv_dataProperties_13_0= RULE_ID ) ) (otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) ) )* otherlv_16= ']' ) )?
            int alt52=2;
            int LA52_0 = input.LA(1);

            if ( (LA52_0==52) ) {
                alt52=1;
            }
            switch (alt52) {
                case 1 :
                    // InternalESAML.g:3005:4: otherlv_11= '.' (otherlv_12= '[' ( (lv_dataProperties_13_0= RULE_ID ) ) (otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) ) )* otherlv_16= ']' )
                    {
                    otherlv_11=(Token)match(input,52,FOLLOW_38); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_11, grammarAccess.getAccessChannelAccess().getFullStopKeyword_9_0());
                      			
                    }
                    // InternalESAML.g:3009:4: (otherlv_12= '[' ( (lv_dataProperties_13_0= RULE_ID ) ) (otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) ) )* otherlv_16= ']' )
                    // InternalESAML.g:3010:5: otherlv_12= '[' ( (lv_dataProperties_13_0= RULE_ID ) ) (otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) ) )* otherlv_16= ']'
                    {
                    otherlv_12=(Token)match(input,55,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_12, grammarAccess.getAccessChannelAccess().getLeftSquareBracketKeyword_9_1_0());
                      				
                    }
                    // InternalESAML.g:3014:5: ( (lv_dataProperties_13_0= RULE_ID ) )
                    // InternalESAML.g:3015:6: (lv_dataProperties_13_0= RULE_ID )
                    {
                    // InternalESAML.g:3015:6: (lv_dataProperties_13_0= RULE_ID )
                    // InternalESAML.g:3016:7: lv_dataProperties_13_0= RULE_ID
                    {
                    lv_dataProperties_13_0=(Token)match(input,RULE_ID,FOLLOW_42); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_dataProperties_13_0, grammarAccess.getAccessChannelAccess().getDataPropertiesIDTerminalRuleCall_9_1_1_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getAccessChannelRule());
                      							}
                      							addWithLastConsumed(
                      								current,
                      								"dataProperties",
                      								lv_dataProperties_13_0,
                      								"org.eclipse.xtext.common.Terminals.ID");
                      						
                    }

                    }


                    }

                    // InternalESAML.g:3032:5: (otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) ) )*
                    loop51:
                    do {
                        int alt51=2;
                        int LA51_0 = input.LA(1);

                        if ( (LA51_0==34) ) {
                            alt51=1;
                        }


                        switch (alt51) {
                    	case 1 :
                    	    // InternalESAML.g:3033:6: otherlv_14= ',' ( (lv_dataProperties_15_0= RULE_ID ) )
                    	    {
                    	    otherlv_14=(Token)match(input,34,FOLLOW_8); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						newLeafNode(otherlv_14, grammarAccess.getAccessChannelAccess().getCommaKeyword_9_1_2_0());
                    	      					
                    	    }
                    	    // InternalESAML.g:3037:6: ( (lv_dataProperties_15_0= RULE_ID ) )
                    	    // InternalESAML.g:3038:7: (lv_dataProperties_15_0= RULE_ID )
                    	    {
                    	    // InternalESAML.g:3038:7: (lv_dataProperties_15_0= RULE_ID )
                    	    // InternalESAML.g:3039:8: lv_dataProperties_15_0= RULE_ID
                    	    {
                    	    lv_dataProperties_15_0=(Token)match(input,RULE_ID,FOLLOW_42); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      								newLeafNode(lv_dataProperties_15_0, grammarAccess.getAccessChannelAccess().getDataPropertiesIDTerminalRuleCall_9_1_2_1_0());
                    	      							
                    	    }
                    	    if ( state.backtracking==0 ) {

                    	      								if (current==null) {
                    	      									current = createModelElement(grammarAccess.getAccessChannelRule());
                    	      								}
                    	      								addWithLastConsumed(
                    	      									current,
                    	      									"dataProperties",
                    	      									lv_dataProperties_15_0,
                    	      									"org.eclipse.xtext.common.Terminals.ID");
                    	      							
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop51;
                        }
                    } while (true);

                    otherlv_16=(Token)match(input,56,FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_16, grammarAccess.getAccessChannelAccess().getRightSquareBracketKeyword_9_1_3());
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalESAML.g:3062:3: ( ( ';' )=>otherlv_17= ';' )
            // InternalESAML.g:3063:4: ( ';' )=>otherlv_17= ';'
            {
            otherlv_17=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_17, grammarAccess.getAccessChannelAccess().getSemicolonKeyword_10());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAccessChannel"


    // $ANTLR start "entryRuleSelfPortChannel"
    // InternalESAML.g:3073:1: entryRuleSelfPortChannel returns [EObject current=null] : iv_ruleSelfPortChannel= ruleSelfPortChannel EOF ;
    public final EObject entryRuleSelfPortChannel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSelfPortChannel = null;


        try {
            // InternalESAML.g:3073:56: (iv_ruleSelfPortChannel= ruleSelfPortChannel EOF )
            // InternalESAML.g:3074:2: iv_ruleSelfPortChannel= ruleSelfPortChannel EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSelfPortChannelRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSelfPortChannel=ruleSelfPortChannel();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSelfPortChannel; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSelfPortChannel"


    // $ANTLR start "ruleSelfPortChannel"
    // InternalESAML.g:3080:1: ruleSelfPortChannel returns [EObject current=null] : ( () ( ( (lv_selfPortchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) ) | ( ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_24= ';' ) ) ) ;
    public final EObject ruleSelfPortChannel() throws RecognitionException {
        EObject current = null;

        Token lv_selfPortchannelName_1_0=null;
        Token otherlv_2=null;
        Token lv_variableName_3_0=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        AntlrDatatypeRuleToken lv_portType_6_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:3086:2: ( ( () ( ( (lv_selfPortchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) ) | ( ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_24= ';' ) ) ) )
            // InternalESAML.g:3087:2: ( () ( ( (lv_selfPortchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) ) | ( ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_24= ';' ) ) )
            {
            // InternalESAML.g:3087:2: ( () ( ( (lv_selfPortchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) ) | ( ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_24= ';' ) ) )
            // InternalESAML.g:3088:3: () ( ( (lv_selfPortchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) ) | ( ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_24= ';' ) )
            {
            // InternalESAML.g:3088:3: ()
            // InternalESAML.g:3089:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getSelfPortChannelAccess().getSelfPortChannelAction_0(),
              					current);
              			
            }

            }

            // InternalESAML.g:3095:3: ( ( (lv_selfPortchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) ) | ( ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_24= ';' ) )
            // InternalESAML.g:3096:4: ( (lv_selfPortchannelName_1_0= RULE_ID ) ) otherlv_2= '[' ( (lv_variableName_3_0= RULE_ID ) ) otherlv_4= ']' otherlv_5= ':' ( (lv_portType_6_0= rulePortType ) ) otherlv_7= 'port' ( (otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) ) | ( ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_24= ';' )
            {
            // InternalESAML.g:3096:4: ( (lv_selfPortchannelName_1_0= RULE_ID ) )
            // InternalESAML.g:3097:5: (lv_selfPortchannelName_1_0= RULE_ID )
            {
            // InternalESAML.g:3097:5: (lv_selfPortchannelName_1_0= RULE_ID )
            // InternalESAML.g:3098:6: lv_selfPortchannelName_1_0= RULE_ID
            {
            lv_selfPortchannelName_1_0=(Token)match(input,RULE_ID,FOLLOW_38); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(lv_selfPortchannelName_1_0, grammarAccess.getSelfPortChannelAccess().getSelfPortchannelNameIDTerminalRuleCall_1_0_0());
              					
            }
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getSelfPortChannelRule());
              						}
              						setWithLastConsumed(
              							current,
              							"selfPortchannelName",
              							lv_selfPortchannelName_1_0,
              							"org.eclipse.xtext.common.Terminals.ID");
              					
            }

            }


            }

            otherlv_2=(Token)match(input,55,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_2, grammarAccess.getSelfPortChannelAccess().getLeftSquareBracketKeyword_1_1());
              			
            }
            // InternalESAML.g:3118:4: ( (lv_variableName_3_0= RULE_ID ) )
            // InternalESAML.g:3119:5: (lv_variableName_3_0= RULE_ID )
            {
            // InternalESAML.g:3119:5: (lv_variableName_3_0= RULE_ID )
            // InternalESAML.g:3120:6: lv_variableName_3_0= RULE_ID
            {
            lv_variableName_3_0=(Token)match(input,RULE_ID,FOLLOW_39); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(lv_variableName_3_0, grammarAccess.getSelfPortChannelAccess().getVariableNameIDTerminalRuleCall_1_2_0());
              					
            }
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getSelfPortChannelRule());
              						}
              						setWithLastConsumed(
              							current,
              							"variableName",
              							lv_variableName_3_0,
              							"org.eclipse.xtext.common.Terminals.ID");
              					
            }

            }


            }

            otherlv_4=(Token)match(input,56,FOLLOW_34); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_4, grammarAccess.getSelfPortChannelAccess().getRightSquareBracketKeyword_1_3());
              			
            }
            otherlv_5=(Token)match(input,51,FOLLOW_6); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_5, grammarAccess.getSelfPortChannelAccess().getColonKeyword_1_4());
              			
            }
            // InternalESAML.g:3144:4: ( (lv_portType_6_0= rulePortType ) )
            // InternalESAML.g:3145:5: (lv_portType_6_0= rulePortType )
            {
            // InternalESAML.g:3145:5: (lv_portType_6_0= rulePortType )
            // InternalESAML.g:3146:6: lv_portType_6_0= rulePortType
            {
            if ( state.backtracking==0 ) {

              						newCompositeNode(grammarAccess.getSelfPortChannelAccess().getPortTypePortTypeParserRuleCall_1_5_0());
              					
            }
            pushFollow(FOLLOW_7);
            lv_portType_6_0=rulePortType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElementForParent(grammarAccess.getSelfPortChannelRule());
              						}
              						set(
              							current,
              							"portType",
              							lv_portType_6_0,
              							"com.peppa.xtext.esaml.ESAML.PortType");
              						afterParserOrEnumRuleCall();
              					
            }

            }


            }

            otherlv_7=(Token)match(input,21,FOLLOW_43); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_7, grammarAccess.getSelfPortChannelAccess().getPortKeyword_1_6());
              			
            }
            // InternalESAML.g:3167:4: ( (otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) ) | ( ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) ) ) )
            int alt55=2;
            int LA55_0 = input.LA(1);

            if ( (LA55_0==59) ) {
                alt55=1;
            }
            else if ( (LA55_0==RULE_ID) ) {
                alt55=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 55, 0, input);

                throw nvae;
            }
            switch (alt55) {
                case 1 :
                    // InternalESAML.g:3168:5: (otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) )
                    {
                    // InternalESAML.g:3168:5: (otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) )
                    // InternalESAML.g:3169:6: otherlv_8= 'self' otherlv_9= '.' ( (otherlv_10= RULE_ID ) ) (otherlv_11= '->' | otherlv_12= '<->' ) ( (otherlv_13= RULE_ID ) ) otherlv_14= '.' ( (otherlv_15= RULE_ID ) )
                    {
                    otherlv_8=(Token)match(input,59,FOLLOW_36); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_8, grammarAccess.getSelfPortChannelAccess().getSelfKeyword_1_7_0_0());
                      					
                    }
                    otherlv_9=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_9, grammarAccess.getSelfPortChannelAccess().getFullStopKeyword_1_7_0_1());
                      					
                    }
                    // InternalESAML.g:3177:6: ( (otherlv_10= RULE_ID ) )
                    // InternalESAML.g:3178:7: (otherlv_10= RULE_ID )
                    {
                    // InternalESAML.g:3178:7: (otherlv_10= RULE_ID )
                    // InternalESAML.g:3179:8: otherlv_10= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfPortChannelRule());
                      								}
                      							
                    }
                    otherlv_10=(Token)match(input,RULE_ID,FOLLOW_44); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_10, grammarAccess.getSelfPortChannelAccess().getSourcePortPortFeatureCrossReference_1_7_0_2_0());
                      							
                    }

                    }


                    }

                    // InternalESAML.g:3190:6: (otherlv_11= '->' | otherlv_12= '<->' )
                    int alt53=2;
                    int LA53_0 = input.LA(1);

                    if ( (LA53_0==35) ) {
                        alt53=1;
                    }
                    else if ( (LA53_0==58) ) {
                        alt53=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 53, 0, input);

                        throw nvae;
                    }
                    switch (alt53) {
                        case 1 :
                            // InternalESAML.g:3191:7: otherlv_11= '->'
                            {
                            otherlv_11=(Token)match(input,35,FOLLOW_8); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_11, grammarAccess.getSelfPortChannelAccess().getHyphenMinusGreaterThanSignKeyword_1_7_0_3_0());
                              						
                            }

                            }
                            break;
                        case 2 :
                            // InternalESAML.g:3196:7: otherlv_12= '<->'
                            {
                            otherlv_12=(Token)match(input,58,FOLLOW_8); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_12, grammarAccess.getSelfPortChannelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_1_7_0_3_1());
                              						
                            }

                            }
                            break;

                    }

                    // InternalESAML.g:3201:6: ( (otherlv_13= RULE_ID ) )
                    // InternalESAML.g:3202:7: (otherlv_13= RULE_ID )
                    {
                    // InternalESAML.g:3202:7: (otherlv_13= RULE_ID )
                    // InternalESAML.g:3203:8: otherlv_13= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfPortChannelRule());
                      								}
                      							
                    }
                    otherlv_13=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_13, grammarAccess.getSelfPortChannelAccess().getSinkSubComponentSubComponentCrossReference_1_7_0_4_0());
                      							
                    }

                    }


                    }

                    otherlv_14=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_14, grammarAccess.getSelfPortChannelAccess().getFullStopKeyword_1_7_0_5());
                      					
                    }
                    // InternalESAML.g:3218:6: ( (otherlv_15= RULE_ID ) )
                    // InternalESAML.g:3219:7: (otherlv_15= RULE_ID )
                    {
                    // InternalESAML.g:3219:7: (otherlv_15= RULE_ID )
                    // InternalESAML.g:3220:8: otherlv_15= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfPortChannelRule());
                      								}
                      							
                    }
                    otherlv_15=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_15, grammarAccess.getSelfPortChannelAccess().getSinkPortPortFeatureCrossReference_1_7_0_6_0());
                      							
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalESAML.g:3233:5: ( ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) ) )
                    {
                    // InternalESAML.g:3233:5: ( ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) ) )
                    // InternalESAML.g:3234:6: ( (otherlv_16= RULE_ID ) ) otherlv_17= '.' ( (otherlv_18= RULE_ID ) ) (otherlv_19= '->' | otherlv_20= '<->' ) otherlv_21= 'self' otherlv_22= '.' ( (otherlv_23= RULE_ID ) )
                    {
                    // InternalESAML.g:3234:6: ( (otherlv_16= RULE_ID ) )
                    // InternalESAML.g:3235:7: (otherlv_16= RULE_ID )
                    {
                    // InternalESAML.g:3235:7: (otherlv_16= RULE_ID )
                    // InternalESAML.g:3236:8: otherlv_16= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfPortChannelRule());
                      								}
                      							
                    }
                    otherlv_16=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_16, grammarAccess.getSelfPortChannelAccess().getSourceSubComponentSubComponentCrossReference_1_7_1_0_0());
                      							
                    }

                    }


                    }

                    otherlv_17=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_17, grammarAccess.getSelfPortChannelAccess().getFullStopKeyword_1_7_1_1());
                      					
                    }
                    // InternalESAML.g:3251:6: ( (otherlv_18= RULE_ID ) )
                    // InternalESAML.g:3252:7: (otherlv_18= RULE_ID )
                    {
                    // InternalESAML.g:3252:7: (otherlv_18= RULE_ID )
                    // InternalESAML.g:3253:8: otherlv_18= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfPortChannelRule());
                      								}
                      							
                    }
                    otherlv_18=(Token)match(input,RULE_ID,FOLLOW_44); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_18, grammarAccess.getSelfPortChannelAccess().getSourcePortPortFeatureCrossReference_1_7_1_2_0());
                      							
                    }

                    }


                    }

                    // InternalESAML.g:3264:6: (otherlv_19= '->' | otherlv_20= '<->' )
                    int alt54=2;
                    int LA54_0 = input.LA(1);

                    if ( (LA54_0==35) ) {
                        alt54=1;
                    }
                    else if ( (LA54_0==58) ) {
                        alt54=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 54, 0, input);

                        throw nvae;
                    }
                    switch (alt54) {
                        case 1 :
                            // InternalESAML.g:3265:7: otherlv_19= '->'
                            {
                            otherlv_19=(Token)match(input,35,FOLLOW_45); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_19, grammarAccess.getSelfPortChannelAccess().getHyphenMinusGreaterThanSignKeyword_1_7_1_3_0());
                              						
                            }

                            }
                            break;
                        case 2 :
                            // InternalESAML.g:3270:7: otherlv_20= '<->'
                            {
                            otherlv_20=(Token)match(input,58,FOLLOW_45); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_20, grammarAccess.getSelfPortChannelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_1_7_1_3_1());
                              						
                            }

                            }
                            break;

                    }

                    otherlv_21=(Token)match(input,59,FOLLOW_36); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_21, grammarAccess.getSelfPortChannelAccess().getSelfKeyword_1_7_1_4());
                      					
                    }
                    otherlv_22=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_22, grammarAccess.getSelfPortChannelAccess().getFullStopKeyword_1_7_1_5());
                      					
                    }
                    // InternalESAML.g:3283:6: ( (otherlv_23= RULE_ID ) )
                    // InternalESAML.g:3284:7: (otherlv_23= RULE_ID )
                    {
                    // InternalESAML.g:3284:7: (otherlv_23= RULE_ID )
                    // InternalESAML.g:3285:8: otherlv_23= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfPortChannelRule());
                      								}
                      							
                    }
                    otherlv_23=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_23, grammarAccess.getSelfPortChannelAccess().getSinkPortPortFeatureCrossReference_1_7_1_6_0());
                      							
                    }

                    }


                    }


                    }


                    }
                    break;

            }

            // InternalESAML.g:3298:4: ( ( ';' )=>otherlv_24= ';' )
            // InternalESAML.g:3299:5: ( ';' )=>otherlv_24= ';'
            {
            otherlv_24=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_24, grammarAccess.getSelfPortChannelAccess().getSemicolonKeyword_1_8());
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSelfPortChannel"


    // $ANTLR start "entryRuleSelfAccessChannel"
    // InternalESAML.g:3310:1: entryRuleSelfAccessChannel returns [EObject current=null] : iv_ruleSelfAccessChannel= ruleSelfAccessChannel EOF ;
    public final EObject entryRuleSelfAccessChannel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSelfAccessChannel = null;


        try {
            // InternalESAML.g:3310:58: (iv_ruleSelfAccessChannel= ruleSelfAccessChannel EOF )
            // InternalESAML.g:3311:2: iv_ruleSelfAccessChannel= ruleSelfAccessChannel EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSelfAccessChannelRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSelfAccessChannel=ruleSelfAccessChannel();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSelfAccessChannel; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSelfAccessChannel"


    // $ANTLR start "ruleSelfAccessChannel"
    // InternalESAML.g:3317:1: ruleSelfAccessChannel returns [EObject current=null] : ( () ( ( (lv_accesschannelName_1_0= RULE_ID ) ) otherlv_2= ':' otherlv_3= 'data' otherlv_4= 'access' ( ( ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) ) ) | (otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_21= ';' ) ) ) ;
    public final EObject ruleSelfAccessChannel() throws RecognitionException {
        EObject current = null;

        Token lv_accesschannelName_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token otherlv_21=null;


        	enterRule();

        try {
            // InternalESAML.g:3323:2: ( ( () ( ( (lv_accesschannelName_1_0= RULE_ID ) ) otherlv_2= ':' otherlv_3= 'data' otherlv_4= 'access' ( ( ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) ) ) | (otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_21= ';' ) ) ) )
            // InternalESAML.g:3324:2: ( () ( ( (lv_accesschannelName_1_0= RULE_ID ) ) otherlv_2= ':' otherlv_3= 'data' otherlv_4= 'access' ( ( ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) ) ) | (otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_21= ';' ) ) )
            {
            // InternalESAML.g:3324:2: ( () ( ( (lv_accesschannelName_1_0= RULE_ID ) ) otherlv_2= ':' otherlv_3= 'data' otherlv_4= 'access' ( ( ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) ) ) | (otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_21= ';' ) ) )
            // InternalESAML.g:3325:3: () ( ( (lv_accesschannelName_1_0= RULE_ID ) ) otherlv_2= ':' otherlv_3= 'data' otherlv_4= 'access' ( ( ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) ) ) | (otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_21= ';' ) )
            {
            // InternalESAML.g:3325:3: ()
            // InternalESAML.g:3326:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getSelfAccessChannelAccess().getSelfAccessChannelAction_0(),
              					current);
              			
            }

            }

            // InternalESAML.g:3332:3: ( ( (lv_accesschannelName_1_0= RULE_ID ) ) otherlv_2= ':' otherlv_3= 'data' otherlv_4= 'access' ( ( ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) ) ) | (otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_21= ';' ) )
            // InternalESAML.g:3333:4: ( (lv_accesschannelName_1_0= RULE_ID ) ) otherlv_2= ':' otherlv_3= 'data' otherlv_4= 'access' ( ( ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) ) ) | (otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) ) ) ) ( ( ';' )=>otherlv_21= ';' )
            {
            // InternalESAML.g:3333:4: ( (lv_accesschannelName_1_0= RULE_ID ) )
            // InternalESAML.g:3334:5: (lv_accesschannelName_1_0= RULE_ID )
            {
            // InternalESAML.g:3334:5: (lv_accesschannelName_1_0= RULE_ID )
            // InternalESAML.g:3335:6: lv_accesschannelName_1_0= RULE_ID
            {
            lv_accesschannelName_1_0=(Token)match(input,RULE_ID,FOLLOW_34); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(lv_accesschannelName_1_0, grammarAccess.getSelfAccessChannelAccess().getAccesschannelNameIDTerminalRuleCall_1_0_0());
              					
            }
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getSelfAccessChannelRule());
              						}
              						setWithLastConsumed(
              							current,
              							"accesschannelName",
              							lv_accesschannelName_1_0,
              							"org.eclipse.xtext.common.Terminals.ID");
              					
            }

            }


            }

            otherlv_2=(Token)match(input,51,FOLLOW_10); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_2, grammarAccess.getSelfAccessChannelAccess().getColonKeyword_1_1());
              			
            }
            otherlv_3=(Token)match(input,25,FOLLOW_11); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_3, grammarAccess.getSelfAccessChannelAccess().getDataKeyword_1_2());
              			
            }
            otherlv_4=(Token)match(input,28,FOLLOW_43); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_4, grammarAccess.getSelfAccessChannelAccess().getAccessKeyword_1_3());
              			
            }
            // InternalESAML.g:3363:4: ( ( ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) ) ) | (otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) ) ) )
            int alt58=2;
            int LA58_0 = input.LA(1);

            if ( (LA58_0==RULE_ID) ) {
                alt58=1;
            }
            else if ( (LA58_0==59) ) {
                alt58=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 58, 0, input);

                throw nvae;
            }
            switch (alt58) {
                case 1 :
                    // InternalESAML.g:3364:5: ( ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) ) )
                    {
                    // InternalESAML.g:3364:5: ( ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) ) )
                    // InternalESAML.g:3365:6: ( (otherlv_5= RULE_ID ) ) otherlv_6= '.' ( (otherlv_7= RULE_ID ) ) (otherlv_8= '->' | otherlv_9= '<->' ) otherlv_10= 'self' otherlv_11= '.' ( (otherlv_12= RULE_ID ) )
                    {
                    // InternalESAML.g:3365:6: ( (otherlv_5= RULE_ID ) )
                    // InternalESAML.g:3366:7: (otherlv_5= RULE_ID )
                    {
                    // InternalESAML.g:3366:7: (otherlv_5= RULE_ID )
                    // InternalESAML.g:3367:8: otherlv_5= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfAccessChannelRule());
                      								}
                      							
                    }
                    otherlv_5=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_5, grammarAccess.getSelfAccessChannelAccess().getSourceSubComponentSubComponentCrossReference_1_4_0_0_0());
                      							
                    }

                    }


                    }

                    otherlv_6=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_6, grammarAccess.getSelfAccessChannelAccess().getFullStopKeyword_1_4_0_1());
                      					
                    }
                    // InternalESAML.g:3382:6: ( (otherlv_7= RULE_ID ) )
                    // InternalESAML.g:3383:7: (otherlv_7= RULE_ID )
                    {
                    // InternalESAML.g:3383:7: (otherlv_7= RULE_ID )
                    // InternalESAML.g:3384:8: otherlv_7= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfAccessChannelRule());
                      								}
                      							
                    }
                    otherlv_7=(Token)match(input,RULE_ID,FOLLOW_44); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_7, grammarAccess.getSelfAccessChannelAccess().getSourceAccessAccessFeatureCrossReference_1_4_0_2_0());
                      							
                    }

                    }


                    }

                    // InternalESAML.g:3395:6: (otherlv_8= '->' | otherlv_9= '<->' )
                    int alt56=2;
                    int LA56_0 = input.LA(1);

                    if ( (LA56_0==35) ) {
                        alt56=1;
                    }
                    else if ( (LA56_0==58) ) {
                        alt56=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 56, 0, input);

                        throw nvae;
                    }
                    switch (alt56) {
                        case 1 :
                            // InternalESAML.g:3396:7: otherlv_8= '->'
                            {
                            otherlv_8=(Token)match(input,35,FOLLOW_45); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_8, grammarAccess.getSelfAccessChannelAccess().getHyphenMinusGreaterThanSignKeyword_1_4_0_3_0());
                              						
                            }

                            }
                            break;
                        case 2 :
                            // InternalESAML.g:3401:7: otherlv_9= '<->'
                            {
                            otherlv_9=(Token)match(input,58,FOLLOW_45); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_9, grammarAccess.getSelfAccessChannelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_1_4_0_3_1());
                              						
                            }

                            }
                            break;

                    }

                    otherlv_10=(Token)match(input,59,FOLLOW_36); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_10, grammarAccess.getSelfAccessChannelAccess().getSelfKeyword_1_4_0_4());
                      					
                    }
                    otherlv_11=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_11, grammarAccess.getSelfAccessChannelAccess().getFullStopKeyword_1_4_0_5());
                      					
                    }
                    // InternalESAML.g:3414:6: ( (otherlv_12= RULE_ID ) )
                    // InternalESAML.g:3415:7: (otherlv_12= RULE_ID )
                    {
                    // InternalESAML.g:3415:7: (otherlv_12= RULE_ID )
                    // InternalESAML.g:3416:8: otherlv_12= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfAccessChannelRule());
                      								}
                      							
                    }
                    otherlv_12=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_12, grammarAccess.getSelfAccessChannelAccess().getSinkAccessAccessFeatureCrossReference_1_4_0_6_0());
                      							
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalESAML.g:3429:5: (otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) ) )
                    {
                    // InternalESAML.g:3429:5: (otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) ) )
                    // InternalESAML.g:3430:6: otherlv_13= 'self' otherlv_14= '.' ( (otherlv_15= RULE_ID ) ) (otherlv_16= '->' | otherlv_17= '<->' ) ( (otherlv_18= RULE_ID ) ) otherlv_19= '.' ( (otherlv_20= RULE_ID ) )
                    {
                    otherlv_13=(Token)match(input,59,FOLLOW_36); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_13, grammarAccess.getSelfAccessChannelAccess().getSelfKeyword_1_4_1_0());
                      					
                    }
                    otherlv_14=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_14, grammarAccess.getSelfAccessChannelAccess().getFullStopKeyword_1_4_1_1());
                      					
                    }
                    // InternalESAML.g:3438:6: ( (otherlv_15= RULE_ID ) )
                    // InternalESAML.g:3439:7: (otherlv_15= RULE_ID )
                    {
                    // InternalESAML.g:3439:7: (otherlv_15= RULE_ID )
                    // InternalESAML.g:3440:8: otherlv_15= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfAccessChannelRule());
                      								}
                      							
                    }
                    otherlv_15=(Token)match(input,RULE_ID,FOLLOW_44); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_15, grammarAccess.getSelfAccessChannelAccess().getSourceAccessAccessFeatureCrossReference_1_4_1_2_0());
                      							
                    }

                    }


                    }

                    // InternalESAML.g:3451:6: (otherlv_16= '->' | otherlv_17= '<->' )
                    int alt57=2;
                    int LA57_0 = input.LA(1);

                    if ( (LA57_0==35) ) {
                        alt57=1;
                    }
                    else if ( (LA57_0==58) ) {
                        alt57=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 57, 0, input);

                        throw nvae;
                    }
                    switch (alt57) {
                        case 1 :
                            // InternalESAML.g:3452:7: otherlv_16= '->'
                            {
                            otherlv_16=(Token)match(input,35,FOLLOW_8); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_16, grammarAccess.getSelfAccessChannelAccess().getHyphenMinusGreaterThanSignKeyword_1_4_1_3_0());
                              						
                            }

                            }
                            break;
                        case 2 :
                            // InternalESAML.g:3457:7: otherlv_17= '<->'
                            {
                            otherlv_17=(Token)match(input,58,FOLLOW_8); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_17, grammarAccess.getSelfAccessChannelAccess().getLessThanSignHyphenMinusGreaterThanSignKeyword_1_4_1_3_1());
                              						
                            }

                            }
                            break;

                    }

                    // InternalESAML.g:3462:6: ( (otherlv_18= RULE_ID ) )
                    // InternalESAML.g:3463:7: (otherlv_18= RULE_ID )
                    {
                    // InternalESAML.g:3463:7: (otherlv_18= RULE_ID )
                    // InternalESAML.g:3464:8: otherlv_18= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfAccessChannelRule());
                      								}
                      							
                    }
                    otherlv_18=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_18, grammarAccess.getSelfAccessChannelAccess().getSinkSubComponentSubComponentCrossReference_1_4_1_4_0());
                      							
                    }

                    }


                    }

                    otherlv_19=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_19, grammarAccess.getSelfAccessChannelAccess().getFullStopKeyword_1_4_1_5());
                      					
                    }
                    // InternalESAML.g:3479:6: ( (otherlv_20= RULE_ID ) )
                    // InternalESAML.g:3480:7: (otherlv_20= RULE_ID )
                    {
                    // InternalESAML.g:3480:7: (otherlv_20= RULE_ID )
                    // InternalESAML.g:3481:8: otherlv_20= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElement(grammarAccess.getSelfAccessChannelRule());
                      								}
                      							
                    }
                    otherlv_20=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								newLeafNode(otherlv_20, grammarAccess.getSelfAccessChannelAccess().getSinkAccessAccessFeatureCrossReference_1_4_1_6_0());
                      							
                    }

                    }


                    }


                    }


                    }
                    break;

            }

            // InternalESAML.g:3494:4: ( ( ';' )=>otherlv_21= ';' )
            // InternalESAML.g:3495:5: ( ';' )=>otherlv_21= ';'
            {
            otherlv_21=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_21, grammarAccess.getSelfAccessChannelAccess().getSemicolonKeyword_1_5());
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSelfAccessChannel"


    // $ANTLR start "entryRuleTransition"
    // InternalESAML.g:3506:1: entryRuleTransition returns [EObject current=null] : iv_ruleTransition= ruleTransition EOF ;
    public final EObject entryRuleTransition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTransition = null;


        try {
            // InternalESAML.g:3506:51: (iv_ruleTransition= ruleTransition EOF )
            // InternalESAML.g:3507:2: iv_ruleTransition= ruleTransition EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTransitionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleTransition=ruleTransition();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTransition; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTransition"


    // $ANTLR start "ruleTransition"
    // InternalESAML.g:3513:1: ruleTransition returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '<' ( (lv_booleanExpression_2_0= ruleBooleanExpression ) ) otherlv_3= '>' ( (otherlv_4= RULE_ID ) ) otherlv_5= ';' ) ;
    public final EObject ruleTransition() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        AntlrDatatypeRuleToken lv_booleanExpression_2_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:3519:2: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '<' ( (lv_booleanExpression_2_0= ruleBooleanExpression ) ) otherlv_3= '>' ( (otherlv_4= RULE_ID ) ) otherlv_5= ';' ) )
            // InternalESAML.g:3520:2: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '<' ( (lv_booleanExpression_2_0= ruleBooleanExpression ) ) otherlv_3= '>' ( (otherlv_4= RULE_ID ) ) otherlv_5= ';' )
            {
            // InternalESAML.g:3520:2: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '<' ( (lv_booleanExpression_2_0= ruleBooleanExpression ) ) otherlv_3= '>' ( (otherlv_4= RULE_ID ) ) otherlv_5= ';' )
            // InternalESAML.g:3521:3: ( (otherlv_0= RULE_ID ) ) otherlv_1= '<' ( (lv_booleanExpression_2_0= ruleBooleanExpression ) ) otherlv_3= '>' ( (otherlv_4= RULE_ID ) ) otherlv_5= ';'
            {
            // InternalESAML.g:3521:3: ( (otherlv_0= RULE_ID ) )
            // InternalESAML.g:3522:4: (otherlv_0= RULE_ID )
            {
            // InternalESAML.g:3522:4: (otherlv_0= RULE_ID )
            // InternalESAML.g:3523:5: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getTransitionRule());
              					}
              				
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_46); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_0, grammarAccess.getTransitionAccess().getSourceStateSubComponentCrossReference_0_0());
              				
            }

            }


            }

            otherlv_1=(Token)match(input,60,FOLLOW_47); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getTransitionAccess().getLessThanSignKeyword_1());
              		
            }
            // InternalESAML.g:3538:3: ( (lv_booleanExpression_2_0= ruleBooleanExpression ) )
            // InternalESAML.g:3539:4: (lv_booleanExpression_2_0= ruleBooleanExpression )
            {
            // InternalESAML.g:3539:4: (lv_booleanExpression_2_0= ruleBooleanExpression )
            // InternalESAML.g:3540:5: lv_booleanExpression_2_0= ruleBooleanExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getTransitionAccess().getBooleanExpressionBooleanExpressionParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_48);
            lv_booleanExpression_2_0=ruleBooleanExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getTransitionRule());
              					}
              					set(
              						current,
              						"booleanExpression",
              						lv_booleanExpression_2_0,
              						"com.peppa.xtext.esaml.ESAML.BooleanExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_3=(Token)match(input,46,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getTransitionAccess().getGreaterThanSignKeyword_3());
              		
            }
            // InternalESAML.g:3561:3: ( (otherlv_4= RULE_ID ) )
            // InternalESAML.g:3562:4: (otherlv_4= RULE_ID )
            {
            // InternalESAML.g:3562:4: (otherlv_4= RULE_ID )
            // InternalESAML.g:3563:5: otherlv_4= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getTransitionRule());
              					}
              				
            }
            otherlv_4=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_4, grammarAccess.getTransitionAccess().getSinkStateSubComponentCrossReference_4_0());
              				
            }

            }


            }

            otherlv_5=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_5, grammarAccess.getTransitionAccess().getSemicolonKeyword_5());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTransition"


    // $ANTLR start "entryRuleActivityInteractions"
    // InternalESAML.g:3582:1: entryRuleActivityInteractions returns [EObject current=null] : iv_ruleActivityInteractions= ruleActivityInteractions EOF ;
    public final EObject entryRuleActivityInteractions() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleActivityInteractions = null;


        try {
            // InternalESAML.g:3582:61: (iv_ruleActivityInteractions= ruleActivityInteractions EOF )
            // InternalESAML.g:3583:2: iv_ruleActivityInteractions= ruleActivityInteractions EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getActivityInteractionsRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleActivityInteractions=ruleActivityInteractions();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleActivityInteractions; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleActivityInteractions"


    // $ANTLR start "ruleActivityInteractions"
    // InternalESAML.g:3589:1: ruleActivityInteractions returns [EObject current=null] : ( () ( (otherlv_1= 'components' ( ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) ) | ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) ) )+ )? (otherlv_4= 'processes' ( (lv_processes_5_0= ruleChannel ) )+ )? (otherlv_6= 'schedule' ( (lv_activityControlFlow_7_0= ruleSchedule ) ) )? ) ) ;
    public final EObject ruleActivityInteractions() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_ownedActivitySubComponent_2_0 = null;

        EObject lv_ownedDataSubComponent_3_0 = null;

        EObject lv_processes_5_0 = null;

        EObject lv_activityControlFlow_7_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:3595:2: ( ( () ( (otherlv_1= 'components' ( ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) ) | ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) ) )+ )? (otherlv_4= 'processes' ( (lv_processes_5_0= ruleChannel ) )+ )? (otherlv_6= 'schedule' ( (lv_activityControlFlow_7_0= ruleSchedule ) ) )? ) ) )
            // InternalESAML.g:3596:2: ( () ( (otherlv_1= 'components' ( ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) ) | ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) ) )+ )? (otherlv_4= 'processes' ( (lv_processes_5_0= ruleChannel ) )+ )? (otherlv_6= 'schedule' ( (lv_activityControlFlow_7_0= ruleSchedule ) ) )? ) )
            {
            // InternalESAML.g:3596:2: ( () ( (otherlv_1= 'components' ( ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) ) | ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) ) )+ )? (otherlv_4= 'processes' ( (lv_processes_5_0= ruleChannel ) )+ )? (otherlv_6= 'schedule' ( (lv_activityControlFlow_7_0= ruleSchedule ) ) )? ) )
            // InternalESAML.g:3597:3: () ( (otherlv_1= 'components' ( ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) ) | ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) ) )+ )? (otherlv_4= 'processes' ( (lv_processes_5_0= ruleChannel ) )+ )? (otherlv_6= 'schedule' ( (lv_activityControlFlow_7_0= ruleSchedule ) ) )? )
            {
            // InternalESAML.g:3597:3: ()
            // InternalESAML.g:3598:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getActivityInteractionsAccess().getActivityInteractionsAction_0(),
              					current);
              			
            }

            }

            // InternalESAML.g:3604:3: ( (otherlv_1= 'components' ( ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) ) | ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) ) )+ )? (otherlv_4= 'processes' ( (lv_processes_5_0= ruleChannel ) )+ )? (otherlv_6= 'schedule' ( (lv_activityControlFlow_7_0= ruleSchedule ) ) )? )
            // InternalESAML.g:3605:4: (otherlv_1= 'components' ( ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) ) | ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) ) )+ )? (otherlv_4= 'processes' ( (lv_processes_5_0= ruleChannel ) )+ )? (otherlv_6= 'schedule' ( (lv_activityControlFlow_7_0= ruleSchedule ) ) )?
            {
            // InternalESAML.g:3605:4: (otherlv_1= 'components' ( ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) ) | ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) ) )+ )?
            int alt60=2;
            int LA60_0 = input.LA(1);

            if ( (LA60_0==61) ) {
                alt60=1;
            }
            switch (alt60) {
                case 1 :
                    // InternalESAML.g:3606:5: otherlv_1= 'components' ( ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) ) | ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) ) )+
                    {
                    otherlv_1=(Token)match(input,61,FOLLOW_49); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_1, grammarAccess.getActivityInteractionsAccess().getComponentsKeyword_1_0_0());
                      				
                    }
                    // InternalESAML.g:3610:5: ( ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) ) | ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) ) )+
                    int cnt59=0;
                    loop59:
                    do {
                        int alt59=3;
                        int LA59_0 = input.LA(1);

                        if ( (LA59_0==38||LA59_0==53) ) {
                            alt59=1;
                        }
                        else if ( (LA59_0==25) ) {
                            alt59=2;
                        }


                        switch (alt59) {
                    	case 1 :
                    	    // InternalESAML.g:3611:6: ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) )
                    	    {
                    	    // InternalESAML.g:3611:6: ( (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent ) )
                    	    // InternalESAML.g:3612:7: (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent )
                    	    {
                    	    // InternalESAML.g:3612:7: (lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent )
                    	    // InternalESAML.g:3613:8: lv_ownedActivitySubComponent_2_0= ruleActivitySubComponent
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      								newCompositeNode(grammarAccess.getActivityInteractionsAccess().getOwnedActivitySubComponentActivitySubComponentParserRuleCall_1_0_1_0_0());
                    	      							
                    	    }
                    	    pushFollow(FOLLOW_50);
                    	    lv_ownedActivitySubComponent_2_0=ruleActivitySubComponent();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      								if (current==null) {
                    	      									current = createModelElementForParent(grammarAccess.getActivityInteractionsRule());
                    	      								}
                    	      								add(
                    	      									current,
                    	      									"ownedActivitySubComponent",
                    	      									lv_ownedActivitySubComponent_2_0,
                    	      									"com.peppa.xtext.esaml.ESAML.ActivitySubComponent");
                    	      								afterParserOrEnumRuleCall();
                    	      							
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalESAML.g:3631:6: ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) )
                    	    {
                    	    // InternalESAML.g:3631:6: ( (lv_ownedDataSubComponent_3_0= ruleDataSubComponent ) )
                    	    // InternalESAML.g:3632:7: (lv_ownedDataSubComponent_3_0= ruleDataSubComponent )
                    	    {
                    	    // InternalESAML.g:3632:7: (lv_ownedDataSubComponent_3_0= ruleDataSubComponent )
                    	    // InternalESAML.g:3633:8: lv_ownedDataSubComponent_3_0= ruleDataSubComponent
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      								newCompositeNode(grammarAccess.getActivityInteractionsAccess().getOwnedDataSubComponentDataSubComponentParserRuleCall_1_0_1_1_0());
                    	      							
                    	    }
                    	    pushFollow(FOLLOW_50);
                    	    lv_ownedDataSubComponent_3_0=ruleDataSubComponent();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      								if (current==null) {
                    	      									current = createModelElementForParent(grammarAccess.getActivityInteractionsRule());
                    	      								}
                    	      								add(
                    	      									current,
                    	      									"ownedDataSubComponent",
                    	      									lv_ownedDataSubComponent_3_0,
                    	      									"com.peppa.xtext.esaml.ESAML.DataSubComponent");
                    	      								afterParserOrEnumRuleCall();
                    	      							
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt59 >= 1 ) break loop59;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(59, input);
                                throw eee;
                        }
                        cnt59++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:3652:4: (otherlv_4= 'processes' ( (lv_processes_5_0= ruleChannel ) )+ )?
            int alt62=2;
            int LA62_0 = input.LA(1);

            if ( (LA62_0==62) ) {
                alt62=1;
            }
            switch (alt62) {
                case 1 :
                    // InternalESAML.g:3653:5: otherlv_4= 'processes' ( (lv_processes_5_0= ruleChannel ) )+
                    {
                    otherlv_4=(Token)match(input,62,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_4, grammarAccess.getActivityInteractionsAccess().getProcessesKeyword_1_1_0());
                      				
                    }
                    // InternalESAML.g:3657:5: ( (lv_processes_5_0= ruleChannel ) )+
                    int cnt61=0;
                    loop61:
                    do {
                        int alt61=2;
                        int LA61_0 = input.LA(1);

                        if ( (LA61_0==RULE_ID) ) {
                            alt61=1;
                        }


                        switch (alt61) {
                    	case 1 :
                    	    // InternalESAML.g:3658:6: (lv_processes_5_0= ruleChannel )
                    	    {
                    	    // InternalESAML.g:3658:6: (lv_processes_5_0= ruleChannel )
                    	    // InternalESAML.g:3659:7: lv_processes_5_0= ruleChannel
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getActivityInteractionsAccess().getProcessesChannelParserRuleCall_1_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_51);
                    	    lv_processes_5_0=ruleChannel();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getActivityInteractionsRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"processes",
                    	      								lv_processes_5_0,
                    	      								"com.peppa.xtext.esaml.ESAML.Channel");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt61 >= 1 ) break loop61;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(61, input);
                                throw eee;
                        }
                        cnt61++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:3677:4: (otherlv_6= 'schedule' ( (lv_activityControlFlow_7_0= ruleSchedule ) ) )?
            int alt63=2;
            int LA63_0 = input.LA(1);

            if ( (LA63_0==63) ) {
                alt63=1;
            }
            switch (alt63) {
                case 1 :
                    // InternalESAML.g:3678:5: otherlv_6= 'schedule' ( (lv_activityControlFlow_7_0= ruleSchedule ) )
                    {
                    otherlv_6=(Token)match(input,63,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_6, grammarAccess.getActivityInteractionsAccess().getScheduleKeyword_1_2_0());
                      				
                    }
                    // InternalESAML.g:3682:5: ( (lv_activityControlFlow_7_0= ruleSchedule ) )
                    // InternalESAML.g:3683:6: (lv_activityControlFlow_7_0= ruleSchedule )
                    {
                    // InternalESAML.g:3683:6: (lv_activityControlFlow_7_0= ruleSchedule )
                    // InternalESAML.g:3684:7: lv_activityControlFlow_7_0= ruleSchedule
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getActivityInteractionsAccess().getActivityControlFlowScheduleParserRuleCall_1_2_1_0());
                      						
                    }
                    pushFollow(FOLLOW_2);
                    lv_activityControlFlow_7_0=ruleSchedule();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getActivityInteractionsRule());
                      							}
                      							set(
                      								current,
                      								"activityControlFlow",
                      								lv_activityControlFlow_7_0,
                      								"com.peppa.xtext.esaml.ESAML.Schedule");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleActivityInteractions"


    // $ANTLR start "entryRuleStateMachine"
    // InternalESAML.g:3707:1: entryRuleStateMachine returns [EObject current=null] : iv_ruleStateMachine= ruleStateMachine EOF ;
    public final EObject entryRuleStateMachine() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStateMachine = null;


        try {
            // InternalESAML.g:3707:53: (iv_ruleStateMachine= ruleStateMachine EOF )
            // InternalESAML.g:3708:2: iv_ruleStateMachine= ruleStateMachine EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getStateMachineRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleStateMachine=ruleStateMachine();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleStateMachine; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleStateMachine"


    // $ANTLR start "ruleStateMachine"
    // InternalESAML.g:3714:1: ruleStateMachine returns [EObject current=null] : ( () ( (otherlv_1= 'components' ( (lv_ownedStateSubComponent_2_0= ruleStateSubComponent ) )+ )? (otherlv_3= 'transitions' ( (lv_transitions_4_0= ruleTransition ) )+ )? ) ) ;
    public final EObject ruleStateMachine() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ownedStateSubComponent_2_0 = null;

        EObject lv_transitions_4_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:3720:2: ( ( () ( (otherlv_1= 'components' ( (lv_ownedStateSubComponent_2_0= ruleStateSubComponent ) )+ )? (otherlv_3= 'transitions' ( (lv_transitions_4_0= ruleTransition ) )+ )? ) ) )
            // InternalESAML.g:3721:2: ( () ( (otherlv_1= 'components' ( (lv_ownedStateSubComponent_2_0= ruleStateSubComponent ) )+ )? (otherlv_3= 'transitions' ( (lv_transitions_4_0= ruleTransition ) )+ )? ) )
            {
            // InternalESAML.g:3721:2: ( () ( (otherlv_1= 'components' ( (lv_ownedStateSubComponent_2_0= ruleStateSubComponent ) )+ )? (otherlv_3= 'transitions' ( (lv_transitions_4_0= ruleTransition ) )+ )? ) )
            // InternalESAML.g:3722:3: () ( (otherlv_1= 'components' ( (lv_ownedStateSubComponent_2_0= ruleStateSubComponent ) )+ )? (otherlv_3= 'transitions' ( (lv_transitions_4_0= ruleTransition ) )+ )? )
            {
            // InternalESAML.g:3722:3: ()
            // InternalESAML.g:3723:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getStateMachineAccess().getStateMachineAction_0(),
              					current);
              			
            }

            }

            // InternalESAML.g:3729:3: ( (otherlv_1= 'components' ( (lv_ownedStateSubComponent_2_0= ruleStateSubComponent ) )+ )? (otherlv_3= 'transitions' ( (lv_transitions_4_0= ruleTransition ) )+ )? )
            // InternalESAML.g:3730:4: (otherlv_1= 'components' ( (lv_ownedStateSubComponent_2_0= ruleStateSubComponent ) )+ )? (otherlv_3= 'transitions' ( (lv_transitions_4_0= ruleTransition ) )+ )?
            {
            // InternalESAML.g:3730:4: (otherlv_1= 'components' ( (lv_ownedStateSubComponent_2_0= ruleStateSubComponent ) )+ )?
            int alt65=2;
            int LA65_0 = input.LA(1);

            if ( (LA65_0==61) ) {
                alt65=1;
            }
            switch (alt65) {
                case 1 :
                    // InternalESAML.g:3731:5: otherlv_1= 'components' ( (lv_ownedStateSubComponent_2_0= ruleStateSubComponent ) )+
                    {
                    otherlv_1=(Token)match(input,61,FOLLOW_52); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_1, grammarAccess.getStateMachineAccess().getComponentsKeyword_1_0_0());
                      				
                    }
                    // InternalESAML.g:3735:5: ( (lv_ownedStateSubComponent_2_0= ruleStateSubComponent ) )+
                    int cnt64=0;
                    loop64:
                    do {
                        int alt64=2;
                        int LA64_0 = input.LA(1);

                        if ( (LA64_0==42||LA64_0==54) ) {
                            alt64=1;
                        }


                        switch (alt64) {
                    	case 1 :
                    	    // InternalESAML.g:3736:6: (lv_ownedStateSubComponent_2_0= ruleStateSubComponent )
                    	    {
                    	    // InternalESAML.g:3736:6: (lv_ownedStateSubComponent_2_0= ruleStateSubComponent )
                    	    // InternalESAML.g:3737:7: lv_ownedStateSubComponent_2_0= ruleStateSubComponent
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getStateMachineAccess().getOwnedStateSubComponentStateSubComponentParserRuleCall_1_0_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_53);
                    	    lv_ownedStateSubComponent_2_0=ruleStateSubComponent();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getStateMachineRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"ownedStateSubComponent",
                    	      								lv_ownedStateSubComponent_2_0,
                    	      								"com.peppa.xtext.esaml.ESAML.StateSubComponent");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt64 >= 1 ) break loop64;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(64, input);
                                throw eee;
                        }
                        cnt64++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:3755:4: (otherlv_3= 'transitions' ( (lv_transitions_4_0= ruleTransition ) )+ )?
            int alt67=2;
            int LA67_0 = input.LA(1);

            if ( (LA67_0==64) ) {
                alt67=1;
            }
            switch (alt67) {
                case 1 :
                    // InternalESAML.g:3756:5: otherlv_3= 'transitions' ( (lv_transitions_4_0= ruleTransition ) )+
                    {
                    otherlv_3=(Token)match(input,64,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_3, grammarAccess.getStateMachineAccess().getTransitionsKeyword_1_1_0());
                      				
                    }
                    // InternalESAML.g:3760:5: ( (lv_transitions_4_0= ruleTransition ) )+
                    int cnt66=0;
                    loop66:
                    do {
                        int alt66=2;
                        int LA66_0 = input.LA(1);

                        if ( (LA66_0==RULE_ID) ) {
                            alt66=1;
                        }


                        switch (alt66) {
                    	case 1 :
                    	    // InternalESAML.g:3761:6: (lv_transitions_4_0= ruleTransition )
                    	    {
                    	    // InternalESAML.g:3761:6: (lv_transitions_4_0= ruleTransition )
                    	    // InternalESAML.g:3762:7: lv_transitions_4_0= ruleTransition
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getStateMachineAccess().getTransitionsTransitionParserRuleCall_1_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_54);
                    	    lv_transitions_4_0=ruleTransition();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getStateMachineRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"transitions",
                    	      								lv_transitions_4_0,
                    	      								"com.peppa.xtext.esaml.ESAML.Transition");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt66 >= 1 ) break loop66;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(66, input);
                                throw eee;
                        }
                        cnt66++;
                    } while (true);


                    }
                    break;

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleStateMachine"


    // $ANTLR start "entryRuleOperations"
    // InternalESAML.g:3785:1: entryRuleOperations returns [EObject current=null] : iv_ruleOperations= ruleOperations EOF ;
    public final EObject entryRuleOperations() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleOperations = null;


        try {
            // InternalESAML.g:3785:51: (iv_ruleOperations= ruleOperations EOF )
            // InternalESAML.g:3786:2: iv_ruleOperations= ruleOperations EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOperationsRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOperations=ruleOperations();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOperations; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOperations"


    // $ANTLR start "ruleOperations"
    // InternalESAML.g:3792:1: ruleOperations returns [EObject current=null] : ( () (otherlv_1= 'operations' ( (lv_operations_2_0= ruleOperation ) )+ )? ) ;
    public final EObject ruleOperations() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_operations_2_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:3798:2: ( ( () (otherlv_1= 'operations' ( (lv_operations_2_0= ruleOperation ) )+ )? ) )
            // InternalESAML.g:3799:2: ( () (otherlv_1= 'operations' ( (lv_operations_2_0= ruleOperation ) )+ )? )
            {
            // InternalESAML.g:3799:2: ( () (otherlv_1= 'operations' ( (lv_operations_2_0= ruleOperation ) )+ )? )
            // InternalESAML.g:3800:3: () (otherlv_1= 'operations' ( (lv_operations_2_0= ruleOperation ) )+ )?
            {
            // InternalESAML.g:3800:3: ()
            // InternalESAML.g:3801:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getOperationsAccess().getOperationsAction_0(),
              					current);
              			
            }

            }

            // InternalESAML.g:3807:3: (otherlv_1= 'operations' ( (lv_operations_2_0= ruleOperation ) )+ )?
            int alt69=2;
            int LA69_0 = input.LA(1);

            if ( (LA69_0==65) ) {
                alt69=1;
            }
            switch (alt69) {
                case 1 :
                    // InternalESAML.g:3808:4: otherlv_1= 'operations' ( (lv_operations_2_0= ruleOperation ) )+
                    {
                    otherlv_1=(Token)match(input,65,FOLLOW_55); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getOperationsAccess().getOperationsKeyword_1_0());
                      			
                    }
                    // InternalESAML.g:3812:4: ( (lv_operations_2_0= ruleOperation ) )+
                    int cnt68=0;
                    loop68:
                    do {
                        int alt68=2;
                        int LA68_0 = input.LA(1);

                        if ( (LA68_0==RULE_STRING) ) {
                            alt68=1;
                        }


                        switch (alt68) {
                    	case 1 :
                    	    // InternalESAML.g:3813:5: (lv_operations_2_0= ruleOperation )
                    	    {
                    	    // InternalESAML.g:3813:5: (lv_operations_2_0= ruleOperation )
                    	    // InternalESAML.g:3814:6: lv_operations_2_0= ruleOperation
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getOperationsAccess().getOperationsOperationParserRuleCall_1_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_56);
                    	    lv_operations_2_0=ruleOperation();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getOperationsRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"operations",
                    	      							lv_operations_2_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Operation");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt68 >= 1 ) break loop68;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(68, input);
                                throw eee;
                        }
                        cnt68++;
                    } while (true);


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOperations"


    // $ANTLR start "entryRuleSystemImpl"
    // InternalESAML.g:3836:1: entryRuleSystemImpl returns [EObject current=null] : iv_ruleSystemImpl= ruleSystemImpl EOF ;
    public final EObject entryRuleSystemImpl() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSystemImpl = null;


        try {
            // InternalESAML.g:3836:51: (iv_ruleSystemImpl= ruleSystemImpl EOF )
            // InternalESAML.g:3837:2: iv_ruleSystemImpl= ruleSystemImpl EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSystemImplRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSystemImpl=ruleSystemImpl();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSystemImpl; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSystemImpl"


    // $ANTLR start "ruleSystemImpl"
    // InternalESAML.g:3843:1: ruleSystemImpl returns [EObject current=null] : (otherlv_0= 'system' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )? (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )? (otherlv_9= 'components' ( ( (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent ) ) | ( (lv_ownedDataSubComponent_11_0= ruleDataSubComponent ) ) | ( (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent ) ) | ( (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent ) ) )+ )? (otherlv_14= 'channels' ( (lv_channels_15_0= ruleChannel ) )+ )? ( ( 'end' )=>otherlv_16= 'end' ) ) ;
    public final EObject ruleSystemImpl() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_14=null;
        Token otherlv_16=null;
        EObject lv_inits_6_0 = null;

        EObject lv_properties_8_0 = null;

        EObject lv_ownedSubSystemSubComponent_10_0 = null;

        EObject lv_ownedDataSubComponent_11_0 = null;

        EObject lv_ownedTimeTriggerSubComponent_12_0 = null;

        EObject lv_ownedMonitorSubComponent_13_0 = null;

        EObject lv_channels_15_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:3849:2: ( (otherlv_0= 'system' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )? (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )? (otherlv_9= 'components' ( ( (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent ) ) | ( (lv_ownedDataSubComponent_11_0= ruleDataSubComponent ) ) | ( (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent ) ) | ( (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent ) ) )+ )? (otherlv_14= 'channels' ( (lv_channels_15_0= ruleChannel ) )+ )? ( ( 'end' )=>otherlv_16= 'end' ) ) )
            // InternalESAML.g:3850:2: (otherlv_0= 'system' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )? (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )? (otherlv_9= 'components' ( ( (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent ) ) | ( (lv_ownedDataSubComponent_11_0= ruleDataSubComponent ) ) | ( (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent ) ) | ( (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent ) ) )+ )? (otherlv_14= 'channels' ( (lv_channels_15_0= ruleChannel ) )+ )? ( ( 'end' )=>otherlv_16= 'end' ) )
            {
            // InternalESAML.g:3850:2: (otherlv_0= 'system' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )? (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )? (otherlv_9= 'components' ( ( (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent ) ) | ( (lv_ownedDataSubComponent_11_0= ruleDataSubComponent ) ) | ( (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent ) ) | ( (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent ) ) )+ )? (otherlv_14= 'channels' ( (lv_channels_15_0= ruleChannel ) )+ )? ( ( 'end' )=>otherlv_16= 'end' ) )
            // InternalESAML.g:3851:3: otherlv_0= 'system' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )? (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )? (otherlv_9= 'components' ( ( (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent ) ) | ( (lv_ownedDataSubComponent_11_0= ruleDataSubComponent ) ) | ( (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent ) ) | ( (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent ) ) )+ )? (otherlv_14= 'channels' ( (lv_channels_15_0= ruleChannel ) )+ )? ( ( 'end' )=>otherlv_16= 'end' )
            {
            otherlv_0=(Token)match(input,36,FOLLOW_57); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getSystemImplAccess().getSystemKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,66,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getSystemImplAccess().getImplementationKeyword_1());
              		
            }
            // InternalESAML.g:3859:3: ( (otherlv_2= RULE_ID ) )
            // InternalESAML.g:3860:4: (otherlv_2= RULE_ID )
            {
            // InternalESAML.g:3860:4: (otherlv_2= RULE_ID )
            // InternalESAML.g:3861:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSystemImplRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getSystemImplAccess().getOwnedRealizationSystemTypeCrossReference_2_0());
              				
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getSystemImplAccess().getFullStopKeyword_3());
              		
            }
            // InternalESAML.g:3876:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalESAML.g:3877:4: (lv_name_4_0= RULE_ID )
            {
            // InternalESAML.g:3877:4: (lv_name_4_0= RULE_ID )
            // InternalESAML.g:3878:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_58); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getSystemImplAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSystemImplRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:3894:3: (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )?
            int alt71=2;
            int LA71_0 = input.LA(1);

            if ( (LA71_0==67) ) {
                alt71=1;
            }
            switch (alt71) {
                case 1 :
                    // InternalESAML.g:3895:4: otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+
                    {
                    otherlv_5=(Token)match(input,67,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getSystemImplAccess().getInitKeyword_5_0());
                      			
                    }
                    // InternalESAML.g:3899:4: ( (lv_inits_6_0= ruleInit ) )+
                    int cnt70=0;
                    loop70:
                    do {
                        int alt70=2;
                        int LA70_0 = input.LA(1);

                        if ( (LA70_0==RULE_ID) ) {
                            alt70=1;
                        }


                        switch (alt70) {
                    	case 1 :
                    	    // InternalESAML.g:3900:5: (lv_inits_6_0= ruleInit )
                    	    {
                    	    // InternalESAML.g:3900:5: (lv_inits_6_0= ruleInit )
                    	    // InternalESAML.g:3901:6: lv_inits_6_0= ruleInit
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getSystemImplAccess().getInitsInitParserRuleCall_5_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_59);
                    	    lv_inits_6_0=ruleInit();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getSystemImplRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"inits",
                    	      							lv_inits_6_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Init");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt70 >= 1 ) break loop70;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(70, input);
                                throw eee;
                        }
                        cnt70++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:3919:3: (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )?
            int alt73=2;
            int LA73_0 = input.LA(1);

            if ( (LA73_0==40) ) {
                alt73=1;
            }
            switch (alt73) {
                case 1 :
                    // InternalESAML.g:3920:4: otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+
                    {
                    otherlv_7=(Token)match(input,40,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_7, grammarAccess.getSystemImplAccess().getPropertiesKeyword_6_0());
                      			
                    }
                    // InternalESAML.g:3924:4: ( (lv_properties_8_0= ruleProperty ) )+
                    int cnt72=0;
                    loop72:
                    do {
                        int alt72=2;
                        int LA72_0 = input.LA(1);

                        if ( (LA72_0==RULE_ID||LA72_0==29||(LA72_0>=31 && LA72_0<=32)||(LA72_0>=77 && LA72_0<=84)) ) {
                            alt72=1;
                        }


                        switch (alt72) {
                    	case 1 :
                    	    // InternalESAML.g:3925:5: (lv_properties_8_0= ruleProperty )
                    	    {
                    	    // InternalESAML.g:3925:5: (lv_properties_8_0= ruleProperty )
                    	    // InternalESAML.g:3926:6: lv_properties_8_0= ruleProperty
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getSystemImplAccess().getPropertiesPropertyParserRuleCall_6_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_60);
                    	    lv_properties_8_0=ruleProperty();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getSystemImplRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"properties",
                    	      							lv_properties_8_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Property");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt72 >= 1 ) break loop72;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(72, input);
                                throw eee;
                        }
                        cnt72++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:3944:3: (otherlv_9= 'components' ( ( (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent ) ) | ( (lv_ownedDataSubComponent_11_0= ruleDataSubComponent ) ) | ( (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent ) ) | ( (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent ) ) )+ )?
            int alt75=2;
            int LA75_0 = input.LA(1);

            if ( (LA75_0==61) ) {
                alt75=1;
            }
            switch (alt75) {
                case 1 :
                    // InternalESAML.g:3945:4: otherlv_9= 'components' ( ( (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent ) ) | ( (lv_ownedDataSubComponent_11_0= ruleDataSubComponent ) ) | ( (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent ) ) | ( (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent ) ) )+
                    {
                    otherlv_9=(Token)match(input,61,FOLLOW_61); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_9, grammarAccess.getSystemImplAccess().getComponentsKeyword_7_0());
                      			
                    }
                    // InternalESAML.g:3949:4: ( ( (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent ) ) | ( (lv_ownedDataSubComponent_11_0= ruleDataSubComponent ) ) | ( (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent ) ) | ( (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent ) ) )+
                    int cnt74=0;
                    loop74:
                    do {
                        int alt74=5;
                        switch ( input.LA(1) ) {
                        case 37:
                            {
                            alt74=1;
                            }
                            break;
                        case 25:
                            {
                            alt74=2;
                            }
                            break;
                        case 43:
                            {
                            alt74=3;
                            }
                            break;
                        case 44:
                            {
                            alt74=4;
                            }
                            break;

                        }

                        switch (alt74) {
                    	case 1 :
                    	    // InternalESAML.g:3950:5: ( (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent ) )
                    	    {
                    	    // InternalESAML.g:3950:5: ( (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent ) )
                    	    // InternalESAML.g:3951:6: (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent )
                    	    {
                    	    // InternalESAML.g:3951:6: (lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent )
                    	    // InternalESAML.g:3952:7: lv_ownedSubSystemSubComponent_10_0= ruleSubSystemSubComponent
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getSystemImplAccess().getOwnedSubSystemSubComponentSubSystemSubComponentParserRuleCall_7_1_0_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_62);
                    	    lv_ownedSubSystemSubComponent_10_0=ruleSubSystemSubComponent();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getSystemImplRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"ownedSubSystemSubComponent",
                    	      								lv_ownedSubSystemSubComponent_10_0,
                    	      								"com.peppa.xtext.esaml.ESAML.SubSystemSubComponent");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 2 :
                    	    // InternalESAML.g:3970:5: ( (lv_ownedDataSubComponent_11_0= ruleDataSubComponent ) )
                    	    {
                    	    // InternalESAML.g:3970:5: ( (lv_ownedDataSubComponent_11_0= ruleDataSubComponent ) )
                    	    // InternalESAML.g:3971:6: (lv_ownedDataSubComponent_11_0= ruleDataSubComponent )
                    	    {
                    	    // InternalESAML.g:3971:6: (lv_ownedDataSubComponent_11_0= ruleDataSubComponent )
                    	    // InternalESAML.g:3972:7: lv_ownedDataSubComponent_11_0= ruleDataSubComponent
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getSystemImplAccess().getOwnedDataSubComponentDataSubComponentParserRuleCall_7_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_62);
                    	    lv_ownedDataSubComponent_11_0=ruleDataSubComponent();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getSystemImplRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"ownedDataSubComponent",
                    	      								lv_ownedDataSubComponent_11_0,
                    	      								"com.peppa.xtext.esaml.ESAML.DataSubComponent");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 3 :
                    	    // InternalESAML.g:3990:5: ( (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent ) )
                    	    {
                    	    // InternalESAML.g:3990:5: ( (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent ) )
                    	    // InternalESAML.g:3991:6: (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent )
                    	    {
                    	    // InternalESAML.g:3991:6: (lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent )
                    	    // InternalESAML.g:3992:7: lv_ownedTimeTriggerSubComponent_12_0= ruleTimeTriggerSubComponent
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getSystemImplAccess().getOwnedTimeTriggerSubComponentTimeTriggerSubComponentParserRuleCall_7_1_2_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_62);
                    	    lv_ownedTimeTriggerSubComponent_12_0=ruleTimeTriggerSubComponent();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getSystemImplRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"ownedTimeTriggerSubComponent",
                    	      								lv_ownedTimeTriggerSubComponent_12_0,
                    	      								"com.peppa.xtext.esaml.ESAML.TimeTriggerSubComponent");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;
                    	case 4 :
                    	    // InternalESAML.g:4010:5: ( (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent ) )
                    	    {
                    	    // InternalESAML.g:4010:5: ( (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent ) )
                    	    // InternalESAML.g:4011:6: (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent )
                    	    {
                    	    // InternalESAML.g:4011:6: (lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent )
                    	    // InternalESAML.g:4012:7: lv_ownedMonitorSubComponent_13_0= ruleMonitorSubComponent
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getSystemImplAccess().getOwnedMonitorSubComponentMonitorSubComponentParserRuleCall_7_1_3_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_62);
                    	    lv_ownedMonitorSubComponent_13_0=ruleMonitorSubComponent();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getSystemImplRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"ownedMonitorSubComponent",
                    	      								lv_ownedMonitorSubComponent_13_0,
                    	      								"com.peppa.xtext.esaml.ESAML.MonitorSubComponent");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt74 >= 1 ) break loop74;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(74, input);
                                throw eee;
                        }
                        cnt74++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:4031:3: (otherlv_14= 'channels' ( (lv_channels_15_0= ruleChannel ) )+ )?
            int alt77=2;
            int LA77_0 = input.LA(1);

            if ( (LA77_0==68) ) {
                alt77=1;
            }
            switch (alt77) {
                case 1 :
                    // InternalESAML.g:4032:4: otherlv_14= 'channels' ( (lv_channels_15_0= ruleChannel ) )+
                    {
                    otherlv_14=(Token)match(input,68,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_14, grammarAccess.getSystemImplAccess().getChannelsKeyword_8_0());
                      			
                    }
                    // InternalESAML.g:4036:4: ( (lv_channels_15_0= ruleChannel ) )+
                    int cnt76=0;
                    loop76:
                    do {
                        int alt76=2;
                        int LA76_0 = input.LA(1);

                        if ( (LA76_0==RULE_ID) ) {
                            alt76=1;
                        }


                        switch (alt76) {
                    	case 1 :
                    	    // InternalESAML.g:4037:5: (lv_channels_15_0= ruleChannel )
                    	    {
                    	    // InternalESAML.g:4037:5: (lv_channels_15_0= ruleChannel )
                    	    // InternalESAML.g:4038:6: lv_channels_15_0= ruleChannel
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getSystemImplAccess().getChannelsChannelParserRuleCall_8_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_63);
                    	    lv_channels_15_0=ruleChannel();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getSystemImplRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"channels",
                    	      							lv_channels_15_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Channel");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt76 >= 1 ) break loop76;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(76, input);
                                throw eee;
                        }
                        cnt76++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:4056:3: ( ( 'end' )=>otherlv_16= 'end' )
            // InternalESAML.g:4057:4: ( 'end' )=>otherlv_16= 'end'
            {
            otherlv_16=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_16, grammarAccess.getSystemImplAccess().getEndKeyword_9());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSystemImpl"


    // $ANTLR start "entryRuleSubSystemImpl"
    // InternalESAML.g:4067:1: entryRuleSubSystemImpl returns [EObject current=null] : iv_ruleSubSystemImpl= ruleSubSystemImpl EOF ;
    public final EObject entryRuleSubSystemImpl() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSubSystemImpl = null;


        try {
            // InternalESAML.g:4067:54: (iv_ruleSubSystemImpl= ruleSubSystemImpl EOF )
            // InternalESAML.g:4068:2: iv_ruleSubSystemImpl= ruleSubSystemImpl EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSubSystemImplRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSubSystemImpl=ruleSubSystemImpl();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSubSystemImpl; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSubSystemImpl"


    // $ANTLR start "ruleSubSystemImpl"
    // InternalESAML.g:4074:1: ruleSubSystemImpl returns [EObject current=null] : (otherlv_0= 'subsystem' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )? (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )? ( ( (lv_activityInteractions_9_0= ruleActivityInteractions ) ) | ( (lv_operations_10_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_11= 'end' ) ) ;
    public final EObject ruleSubSystemImpl() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_11=null;
        EObject lv_inits_6_0 = null;

        EObject lv_properties_8_0 = null;

        EObject lv_activityInteractions_9_0 = null;

        EObject lv_operations_10_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:4080:2: ( (otherlv_0= 'subsystem' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )? (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )? ( ( (lv_activityInteractions_9_0= ruleActivityInteractions ) ) | ( (lv_operations_10_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_11= 'end' ) ) )
            // InternalESAML.g:4081:2: (otherlv_0= 'subsystem' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )? (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )? ( ( (lv_activityInteractions_9_0= ruleActivityInteractions ) ) | ( (lv_operations_10_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_11= 'end' ) )
            {
            // InternalESAML.g:4081:2: (otherlv_0= 'subsystem' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )? (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )? ( ( (lv_activityInteractions_9_0= ruleActivityInteractions ) ) | ( (lv_operations_10_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_11= 'end' ) )
            // InternalESAML.g:4082:3: otherlv_0= 'subsystem' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )? (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )? ( ( (lv_activityInteractions_9_0= ruleActivityInteractions ) ) | ( (lv_operations_10_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_11= 'end' )
            {
            otherlv_0=(Token)match(input,37,FOLLOW_57); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getSubSystemImplAccess().getSubsystemKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,66,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getSubSystemImplAccess().getImplementationKeyword_1());
              		
            }
            // InternalESAML.g:4090:3: ( (otherlv_2= RULE_ID ) )
            // InternalESAML.g:4091:4: (otherlv_2= RULE_ID )
            {
            // InternalESAML.g:4091:4: (otherlv_2= RULE_ID )
            // InternalESAML.g:4092:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSubSystemImplRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getSubSystemImplAccess().getOwnedRealizationSubSystemTypeCrossReference_2_0());
              				
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getSubSystemImplAccess().getFullStopKeyword_3());
              		
            }
            // InternalESAML.g:4107:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalESAML.g:4108:4: (lv_name_4_0= RULE_ID )
            {
            // InternalESAML.g:4108:4: (lv_name_4_0= RULE_ID )
            // InternalESAML.g:4109:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_64); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getSubSystemImplAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getSubSystemImplRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:4125:3: (otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+ )?
            int alt79=2;
            int LA79_0 = input.LA(1);

            if ( (LA79_0==67) ) {
                alt79=1;
            }
            switch (alt79) {
                case 1 :
                    // InternalESAML.g:4126:4: otherlv_5= 'init' ( (lv_inits_6_0= ruleInit ) )+
                    {
                    otherlv_5=(Token)match(input,67,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getSubSystemImplAccess().getInitKeyword_5_0());
                      			
                    }
                    // InternalESAML.g:4130:4: ( (lv_inits_6_0= ruleInit ) )+
                    int cnt78=0;
                    loop78:
                    do {
                        int alt78=2;
                        int LA78_0 = input.LA(1);

                        if ( (LA78_0==RULE_ID) ) {
                            alt78=1;
                        }


                        switch (alt78) {
                    	case 1 :
                    	    // InternalESAML.g:4131:5: (lv_inits_6_0= ruleInit )
                    	    {
                    	    // InternalESAML.g:4131:5: (lv_inits_6_0= ruleInit )
                    	    // InternalESAML.g:4132:6: lv_inits_6_0= ruleInit
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getSubSystemImplAccess().getInitsInitParserRuleCall_5_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_65);
                    	    lv_inits_6_0=ruleInit();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getSubSystemImplRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"inits",
                    	      							lv_inits_6_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Init");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt78 >= 1 ) break loop78;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(78, input);
                                throw eee;
                        }
                        cnt78++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:4150:3: (otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+ )?
            int alt81=2;
            int LA81_0 = input.LA(1);

            if ( (LA81_0==40) ) {
                alt81=1;
            }
            switch (alt81) {
                case 1 :
                    // InternalESAML.g:4151:4: otherlv_7= 'properties' ( (lv_properties_8_0= ruleProperty ) )+
                    {
                    otherlv_7=(Token)match(input,40,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_7, grammarAccess.getSubSystemImplAccess().getPropertiesKeyword_6_0());
                      			
                    }
                    // InternalESAML.g:4155:4: ( (lv_properties_8_0= ruleProperty ) )+
                    int cnt80=0;
                    loop80:
                    do {
                        int alt80=2;
                        int LA80_0 = input.LA(1);

                        if ( (LA80_0==RULE_ID||LA80_0==29||(LA80_0>=31 && LA80_0<=32)||(LA80_0>=77 && LA80_0<=84)) ) {
                            alt80=1;
                        }


                        switch (alt80) {
                    	case 1 :
                    	    // InternalESAML.g:4156:5: (lv_properties_8_0= ruleProperty )
                    	    {
                    	    // InternalESAML.g:4156:5: (lv_properties_8_0= ruleProperty )
                    	    // InternalESAML.g:4157:6: lv_properties_8_0= ruleProperty
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getSubSystemImplAccess().getPropertiesPropertyParserRuleCall_6_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_66);
                    	    lv_properties_8_0=ruleProperty();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getSubSystemImplRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"properties",
                    	      							lv_properties_8_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Property");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt80 >= 1 ) break loop80;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(80, input);
                                throw eee;
                        }
                        cnt80++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:4175:3: ( ( (lv_activityInteractions_9_0= ruleActivityInteractions ) ) | ( (lv_operations_10_0= ruleOperations ) ) )
            int alt82=2;
            switch ( input.LA(1) ) {
            case 61:
            case 62:
            case 63:
                {
                alt82=1;
                }
                break;
            case 41:
                {
                alt82=1;
                }
                break;
            case 65:
                {
                alt82=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 82, 0, input);

                throw nvae;
            }

            switch (alt82) {
                case 1 :
                    // InternalESAML.g:4176:4: ( (lv_activityInteractions_9_0= ruleActivityInteractions ) )
                    {
                    // InternalESAML.g:4176:4: ( (lv_activityInteractions_9_0= ruleActivityInteractions ) )
                    // InternalESAML.g:4177:5: (lv_activityInteractions_9_0= ruleActivityInteractions )
                    {
                    // InternalESAML.g:4177:5: (lv_activityInteractions_9_0= ruleActivityInteractions )
                    // InternalESAML.g:4178:6: lv_activityInteractions_9_0= ruleActivityInteractions
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getSubSystemImplAccess().getActivityInteractionsActivityInteractionsParserRuleCall_7_0_0());
                      					
                    }
                    pushFollow(FOLLOW_67);
                    lv_activityInteractions_9_0=ruleActivityInteractions();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getSubSystemImplRule());
                      						}
                      						set(
                      							current,
                      							"activityInteractions",
                      							lv_activityInteractions_9_0,
                      							"com.peppa.xtext.esaml.ESAML.ActivityInteractions");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalESAML.g:4196:4: ( (lv_operations_10_0= ruleOperations ) )
                    {
                    // InternalESAML.g:4196:4: ( (lv_operations_10_0= ruleOperations ) )
                    // InternalESAML.g:4197:5: (lv_operations_10_0= ruleOperations )
                    {
                    // InternalESAML.g:4197:5: (lv_operations_10_0= ruleOperations )
                    // InternalESAML.g:4198:6: lv_operations_10_0= ruleOperations
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getSubSystemImplAccess().getOperationsOperationsParserRuleCall_7_1_0());
                      					
                    }
                    pushFollow(FOLLOW_67);
                    lv_operations_10_0=ruleOperations();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getSubSystemImplRule());
                      						}
                      						set(
                      							current,
                      							"operations",
                      							lv_operations_10_0,
                      							"com.peppa.xtext.esaml.ESAML.Operations");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalESAML.g:4216:3: ( ( 'end' )=>otherlv_11= 'end' )
            // InternalESAML.g:4217:4: ( 'end' )=>otherlv_11= 'end'
            {
            otherlv_11=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_11, grammarAccess.getSubSystemImplAccess().getEndKeyword_8());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSubSystemImpl"


    // $ANTLR start "entryRuleActivityImpl"
    // InternalESAML.g:4227:1: entryRuleActivityImpl returns [EObject current=null] : iv_ruleActivityImpl= ruleActivityImpl EOF ;
    public final EObject entryRuleActivityImpl() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleActivityImpl = null;


        try {
            // InternalESAML.g:4227:53: (iv_ruleActivityImpl= ruleActivityImpl EOF )
            // InternalESAML.g:4228:2: iv_ruleActivityImpl= ruleActivityImpl EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getActivityImplRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleActivityImpl=ruleActivityImpl();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleActivityImpl; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleActivityImpl"


    // $ANTLR start "ruleActivityImpl"
    // InternalESAML.g:4234:1: ruleActivityImpl returns [EObject current=null] : ( () (otherlv_1= 'activity' otherlv_2= 'implementation' ( (otherlv_3= RULE_ID ) ) otherlv_4= '.' ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= 'properties' ( (lv_properties_7_0= ruleProperty ) )+ )? (otherlv_8= 'activatedguards' otherlv_9= '{' (otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';' )* otherlv_16= '}' ( ( ';' )=>otherlv_17= ';' ) )? ( ( (lv_stateMachine_18_0= ruleStateMachine ) ) | ( (lv_operations_19_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_20= 'end' ) ) ) ;
    public final EObject ruleActivityImpl() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token lv_name_5_0=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token this_ID_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_20=null;
        EObject lv_properties_7_0 = null;

        EObject lv_stateMachine_18_0 = null;

        EObject lv_operations_19_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:4240:2: ( ( () (otherlv_1= 'activity' otherlv_2= 'implementation' ( (otherlv_3= RULE_ID ) ) otherlv_4= '.' ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= 'properties' ( (lv_properties_7_0= ruleProperty ) )+ )? (otherlv_8= 'activatedguards' otherlv_9= '{' (otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';' )* otherlv_16= '}' ( ( ';' )=>otherlv_17= ';' ) )? ( ( (lv_stateMachine_18_0= ruleStateMachine ) ) | ( (lv_operations_19_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_20= 'end' ) ) ) )
            // InternalESAML.g:4241:2: ( () (otherlv_1= 'activity' otherlv_2= 'implementation' ( (otherlv_3= RULE_ID ) ) otherlv_4= '.' ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= 'properties' ( (lv_properties_7_0= ruleProperty ) )+ )? (otherlv_8= 'activatedguards' otherlv_9= '{' (otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';' )* otherlv_16= '}' ( ( ';' )=>otherlv_17= ';' ) )? ( ( (lv_stateMachine_18_0= ruleStateMachine ) ) | ( (lv_operations_19_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_20= 'end' ) ) )
            {
            // InternalESAML.g:4241:2: ( () (otherlv_1= 'activity' otherlv_2= 'implementation' ( (otherlv_3= RULE_ID ) ) otherlv_4= '.' ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= 'properties' ( (lv_properties_7_0= ruleProperty ) )+ )? (otherlv_8= 'activatedguards' otherlv_9= '{' (otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';' )* otherlv_16= '}' ( ( ';' )=>otherlv_17= ';' ) )? ( ( (lv_stateMachine_18_0= ruleStateMachine ) ) | ( (lv_operations_19_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_20= 'end' ) ) )
            // InternalESAML.g:4242:3: () (otherlv_1= 'activity' otherlv_2= 'implementation' ( (otherlv_3= RULE_ID ) ) otherlv_4= '.' ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= 'properties' ( (lv_properties_7_0= ruleProperty ) )+ )? (otherlv_8= 'activatedguards' otherlv_9= '{' (otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';' )* otherlv_16= '}' ( ( ';' )=>otherlv_17= ';' ) )? ( ( (lv_stateMachine_18_0= ruleStateMachine ) ) | ( (lv_operations_19_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_20= 'end' ) )
            {
            // InternalESAML.g:4242:3: ()
            // InternalESAML.g:4243:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getActivityImplAccess().getActivityImplAction_0(),
              					current);
              			
            }

            }

            // InternalESAML.g:4249:3: (otherlv_1= 'activity' otherlv_2= 'implementation' ( (otherlv_3= RULE_ID ) ) otherlv_4= '.' ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= 'properties' ( (lv_properties_7_0= ruleProperty ) )+ )? (otherlv_8= 'activatedguards' otherlv_9= '{' (otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';' )* otherlv_16= '}' ( ( ';' )=>otherlv_17= ';' ) )? ( ( (lv_stateMachine_18_0= ruleStateMachine ) ) | ( (lv_operations_19_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_20= 'end' ) )
            // InternalESAML.g:4250:4: otherlv_1= 'activity' otherlv_2= 'implementation' ( (otherlv_3= RULE_ID ) ) otherlv_4= '.' ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= 'properties' ( (lv_properties_7_0= ruleProperty ) )+ )? (otherlv_8= 'activatedguards' otherlv_9= '{' (otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';' )* otherlv_16= '}' ( ( ';' )=>otherlv_17= ';' ) )? ( ( (lv_stateMachine_18_0= ruleStateMachine ) ) | ( (lv_operations_19_0= ruleOperations ) ) ) ( ( 'end' )=>otherlv_20= 'end' )
            {
            otherlv_1=(Token)match(input,38,FOLLOW_57); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_1, grammarAccess.getActivityImplAccess().getActivityKeyword_1_0());
              			
            }
            otherlv_2=(Token)match(input,66,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_2, grammarAccess.getActivityImplAccess().getImplementationKeyword_1_1());
              			
            }
            // InternalESAML.g:4258:4: ( (otherlv_3= RULE_ID ) )
            // InternalESAML.g:4259:5: (otherlv_3= RULE_ID )
            {
            // InternalESAML.g:4259:5: (otherlv_3= RULE_ID )
            // InternalESAML.g:4260:6: otherlv_3= RULE_ID
            {
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getActivityImplRule());
              						}
              					
            }
            otherlv_3=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(otherlv_3, grammarAccess.getActivityImplAccess().getOwnedRealizationActivityTypeCrossReference_1_2_0());
              					
            }

            }


            }

            otherlv_4=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_4, grammarAccess.getActivityImplAccess().getFullStopKeyword_1_3());
              			
            }
            // InternalESAML.g:4275:4: ( (lv_name_5_0= RULE_ID ) )
            // InternalESAML.g:4276:5: (lv_name_5_0= RULE_ID )
            {
            // InternalESAML.g:4276:5: (lv_name_5_0= RULE_ID )
            // InternalESAML.g:4277:6: lv_name_5_0= RULE_ID
            {
            lv_name_5_0=(Token)match(input,RULE_ID,FOLLOW_68); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              						newLeafNode(lv_name_5_0, grammarAccess.getActivityImplAccess().getNameIDTerminalRuleCall_1_4_0());
              					
            }
            if ( state.backtracking==0 ) {

              						if (current==null) {
              							current = createModelElement(grammarAccess.getActivityImplRule());
              						}
              						setWithLastConsumed(
              							current,
              							"name",
              							lv_name_5_0,
              							"org.eclipse.xtext.common.Terminals.ID");
              					
            }

            }


            }

            // InternalESAML.g:4293:4: (otherlv_6= 'properties' ( (lv_properties_7_0= ruleProperty ) )+ )?
            int alt84=2;
            int LA84_0 = input.LA(1);

            if ( (LA84_0==40) ) {
                alt84=1;
            }
            switch (alt84) {
                case 1 :
                    // InternalESAML.g:4294:5: otherlv_6= 'properties' ( (lv_properties_7_0= ruleProperty ) )+
                    {
                    otherlv_6=(Token)match(input,40,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_6, grammarAccess.getActivityImplAccess().getPropertiesKeyword_1_5_0());
                      				
                    }
                    // InternalESAML.g:4298:5: ( (lv_properties_7_0= ruleProperty ) )+
                    int cnt83=0;
                    loop83:
                    do {
                        int alt83=2;
                        int LA83_0 = input.LA(1);

                        if ( (LA83_0==RULE_ID||LA83_0==29||(LA83_0>=31 && LA83_0<=32)||(LA83_0>=77 && LA83_0<=84)) ) {
                            alt83=1;
                        }


                        switch (alt83) {
                    	case 1 :
                    	    // InternalESAML.g:4299:6: (lv_properties_7_0= ruleProperty )
                    	    {
                    	    // InternalESAML.g:4299:6: (lv_properties_7_0= ruleProperty )
                    	    // InternalESAML.g:4300:7: lv_properties_7_0= ruleProperty
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getActivityImplAccess().getPropertiesPropertyParserRuleCall_1_5_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_69);
                    	    lv_properties_7_0=ruleProperty();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getActivityImplRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"properties",
                    	      								lv_properties_7_0,
                    	      								"com.peppa.xtext.esaml.ESAML.Property");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt83 >= 1 ) break loop83;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(83, input);
                                throw eee;
                        }
                        cnt83++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:4318:4: (otherlv_8= 'activatedguards' otherlv_9= '{' (otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';' )* otherlv_16= '}' ( ( ';' )=>otherlv_17= ';' ) )?
            int alt87=2;
            int LA87_0 = input.LA(1);

            if ( (LA87_0==69) ) {
                alt87=1;
            }
            switch (alt87) {
                case 1 :
                    // InternalESAML.g:4319:5: otherlv_8= 'activatedguards' otherlv_9= '{' (otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';' )* otherlv_16= '}' ( ( ';' )=>otherlv_17= ';' )
                    {
                    otherlv_8=(Token)match(input,69,FOLLOW_70); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_8, grammarAccess.getActivityImplAccess().getActivatedguardsKeyword_1_6_0());
                      				
                    }
                    otherlv_9=(Token)match(input,70,FOLLOW_71); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_9, grammarAccess.getActivityImplAccess().getLeftCurlyBracketKeyword_1_6_1());
                      				
                    }
                    // InternalESAML.g:4327:5: (otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';' )*
                    loop86:
                    do {
                        int alt86=2;
                        int LA86_0 = input.LA(1);

                        if ( (LA86_0==71) ) {
                            alt86=1;
                        }


                        switch (alt86) {
                    	case 1 :
                    	    // InternalESAML.g:4328:6: otherlv_10= 'ready' (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) ) this_ID_14= RULE_ID otherlv_15= ';'
                    	    {
                    	    otherlv_10=(Token)match(input,71,FOLLOW_72); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						newLeafNode(otherlv_10, grammarAccess.getActivityImplAccess().getReadyKeyword_1_6_2_0());
                    	      					
                    	    }
                    	    // InternalESAML.g:4332:6: (otherlv_11= 'port' | (otherlv_12= 'data' otherlv_13= 'access' ) )
                    	    int alt85=2;
                    	    int LA85_0 = input.LA(1);

                    	    if ( (LA85_0==21) ) {
                    	        alt85=1;
                    	    }
                    	    else if ( (LA85_0==25) ) {
                    	        alt85=2;
                    	    }
                    	    else {
                    	        if (state.backtracking>0) {state.failed=true; return current;}
                    	        NoViableAltException nvae =
                    	            new NoViableAltException("", 85, 0, input);

                    	        throw nvae;
                    	    }
                    	    switch (alt85) {
                    	        case 1 :
                    	            // InternalESAML.g:4333:7: otherlv_11= 'port'
                    	            {
                    	            otherlv_11=(Token)match(input,21,FOLLOW_8); if (state.failed) return current;
                    	            if ( state.backtracking==0 ) {

                    	              							newLeafNode(otherlv_11, grammarAccess.getActivityImplAccess().getPortKeyword_1_6_2_1_0());
                    	              						
                    	            }

                    	            }
                    	            break;
                    	        case 2 :
                    	            // InternalESAML.g:4338:7: (otherlv_12= 'data' otherlv_13= 'access' )
                    	            {
                    	            // InternalESAML.g:4338:7: (otherlv_12= 'data' otherlv_13= 'access' )
                    	            // InternalESAML.g:4339:8: otherlv_12= 'data' otherlv_13= 'access'
                    	            {
                    	            otherlv_12=(Token)match(input,25,FOLLOW_11); if (state.failed) return current;
                    	            if ( state.backtracking==0 ) {

                    	              								newLeafNode(otherlv_12, grammarAccess.getActivityImplAccess().getDataKeyword_1_6_2_1_1_0());
                    	              							
                    	            }
                    	            otherlv_13=(Token)match(input,28,FOLLOW_8); if (state.failed) return current;
                    	            if ( state.backtracking==0 ) {

                    	              								newLeafNode(otherlv_13, grammarAccess.getActivityImplAccess().getAccessKeyword_1_6_2_1_1_1());
                    	              							
                    	            }

                    	            }


                    	            }
                    	            break;

                    	    }

                    	    this_ID_14=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						newLeafNode(this_ID_14, grammarAccess.getActivityImplAccess().getIDTerminalRuleCall_1_6_2_2());
                    	      					
                    	    }
                    	    otherlv_15=(Token)match(input,22,FOLLOW_71); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						newLeafNode(otherlv_15, grammarAccess.getActivityImplAccess().getSemicolonKeyword_1_6_2_3());
                    	      					
                    	    }

                    	    }
                    	    break;

                    	default :
                    	    break loop86;
                        }
                    } while (true);

                    otherlv_16=(Token)match(input,72,FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_16, grammarAccess.getActivityImplAccess().getRightCurlyBracketKeyword_1_6_3());
                      				
                    }
                    // InternalESAML.g:4362:5: ( ( ';' )=>otherlv_17= ';' )
                    // InternalESAML.g:4363:6: ( ';' )=>otherlv_17= ';'
                    {
                    otherlv_17=(Token)match(input,22,FOLLOW_73); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(otherlv_17, grammarAccess.getActivityImplAccess().getSemicolonKeyword_1_6_4());
                      					
                    }

                    }


                    }
                    break;

            }

            // InternalESAML.g:4370:4: ( ( (lv_stateMachine_18_0= ruleStateMachine ) ) | ( (lv_operations_19_0= ruleOperations ) ) )
            int alt88=2;
            switch ( input.LA(1) ) {
            case 61:
            case 64:
                {
                alt88=1;
                }
                break;
            case 41:
                {
                alt88=1;
                }
                break;
            case 65:
                {
                alt88=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 88, 0, input);

                throw nvae;
            }

            switch (alt88) {
                case 1 :
                    // InternalESAML.g:4371:5: ( (lv_stateMachine_18_0= ruleStateMachine ) )
                    {
                    // InternalESAML.g:4371:5: ( (lv_stateMachine_18_0= ruleStateMachine ) )
                    // InternalESAML.g:4372:6: (lv_stateMachine_18_0= ruleStateMachine )
                    {
                    // InternalESAML.g:4372:6: (lv_stateMachine_18_0= ruleStateMachine )
                    // InternalESAML.g:4373:7: lv_stateMachine_18_0= ruleStateMachine
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getActivityImplAccess().getStateMachineStateMachineParserRuleCall_1_7_0_0());
                      						
                    }
                    pushFollow(FOLLOW_67);
                    lv_stateMachine_18_0=ruleStateMachine();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getActivityImplRule());
                      							}
                      							set(
                      								current,
                      								"stateMachine",
                      								lv_stateMachine_18_0,
                      								"com.peppa.xtext.esaml.ESAML.StateMachine");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalESAML.g:4391:5: ( (lv_operations_19_0= ruleOperations ) )
                    {
                    // InternalESAML.g:4391:5: ( (lv_operations_19_0= ruleOperations ) )
                    // InternalESAML.g:4392:6: (lv_operations_19_0= ruleOperations )
                    {
                    // InternalESAML.g:4392:6: (lv_operations_19_0= ruleOperations )
                    // InternalESAML.g:4393:7: lv_operations_19_0= ruleOperations
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getActivityImplAccess().getOperationsOperationsParserRuleCall_1_7_1_0());
                      						
                    }
                    pushFollow(FOLLOW_67);
                    lv_operations_19_0=ruleOperations();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getActivityImplRule());
                      							}
                      							set(
                      								current,
                      								"operations",
                      								lv_operations_19_0,
                      								"com.peppa.xtext.esaml.ESAML.Operations");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalESAML.g:4411:4: ( ( 'end' )=>otherlv_20= 'end' )
            // InternalESAML.g:4412:5: ( 'end' )=>otherlv_20= 'end'
            {
            otherlv_20=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_20, grammarAccess.getActivityImplAccess().getEndKeyword_1_8());
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleActivityImpl"


    // $ANTLR start "entryRuleStateImpl"
    // InternalESAML.g:4423:1: entryRuleStateImpl returns [EObject current=null] : iv_ruleStateImpl= ruleStateImpl EOF ;
    public final EObject entryRuleStateImpl() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStateImpl = null;


        try {
            // InternalESAML.g:4423:50: (iv_ruleStateImpl= ruleStateImpl EOF )
            // InternalESAML.g:4424:2: iv_ruleStateImpl= ruleStateImpl EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getStateImplRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleStateImpl=ruleStateImpl();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleStateImpl; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleStateImpl"


    // $ANTLR start "ruleStateImpl"
    // InternalESAML.g:4430:1: ruleStateImpl returns [EObject current=null] : (otherlv_0= 'state' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'entry' otherlv_6= 'operations' ( (lv_entryOperations_7_0= ruleOperation ) )+ )? (otherlv_8= 'during' otherlv_9= 'operations' ( (lv_duringOperations_10_0= ruleOperation ) )+ )? (otherlv_11= 'exit' otherlv_12= 'operations' ( (lv_exitOperations_13_0= ruleOperation ) )+ )? ( ( 'end' )=>otherlv_14= 'end' ) ) ;
    public final EObject ruleStateImpl() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_14=null;
        EObject lv_entryOperations_7_0 = null;

        EObject lv_duringOperations_10_0 = null;

        EObject lv_exitOperations_13_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:4436:2: ( (otherlv_0= 'state' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'entry' otherlv_6= 'operations' ( (lv_entryOperations_7_0= ruleOperation ) )+ )? (otherlv_8= 'during' otherlv_9= 'operations' ( (lv_duringOperations_10_0= ruleOperation ) )+ )? (otherlv_11= 'exit' otherlv_12= 'operations' ( (lv_exitOperations_13_0= ruleOperation ) )+ )? ( ( 'end' )=>otherlv_14= 'end' ) ) )
            // InternalESAML.g:4437:2: (otherlv_0= 'state' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'entry' otherlv_6= 'operations' ( (lv_entryOperations_7_0= ruleOperation ) )+ )? (otherlv_8= 'during' otherlv_9= 'operations' ( (lv_duringOperations_10_0= ruleOperation ) )+ )? (otherlv_11= 'exit' otherlv_12= 'operations' ( (lv_exitOperations_13_0= ruleOperation ) )+ )? ( ( 'end' )=>otherlv_14= 'end' ) )
            {
            // InternalESAML.g:4437:2: (otherlv_0= 'state' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'entry' otherlv_6= 'operations' ( (lv_entryOperations_7_0= ruleOperation ) )+ )? (otherlv_8= 'during' otherlv_9= 'operations' ( (lv_duringOperations_10_0= ruleOperation ) )+ )? (otherlv_11= 'exit' otherlv_12= 'operations' ( (lv_exitOperations_13_0= ruleOperation ) )+ )? ( ( 'end' )=>otherlv_14= 'end' ) )
            // InternalESAML.g:4438:3: otherlv_0= 'state' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'entry' otherlv_6= 'operations' ( (lv_entryOperations_7_0= ruleOperation ) )+ )? (otherlv_8= 'during' otherlv_9= 'operations' ( (lv_duringOperations_10_0= ruleOperation ) )+ )? (otherlv_11= 'exit' otherlv_12= 'operations' ( (lv_exitOperations_13_0= ruleOperation ) )+ )? ( ( 'end' )=>otherlv_14= 'end' )
            {
            otherlv_0=(Token)match(input,42,FOLLOW_57); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getStateImplAccess().getStateKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,66,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getStateImplAccess().getImplementationKeyword_1());
              		
            }
            // InternalESAML.g:4446:3: ( (otherlv_2= RULE_ID ) )
            // InternalESAML.g:4447:4: (otherlv_2= RULE_ID )
            {
            // InternalESAML.g:4447:4: (otherlv_2= RULE_ID )
            // InternalESAML.g:4448:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getStateImplRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getStateImplAccess().getOwnedRealizationStateTypeCrossReference_2_0());
              				
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getStateImplAccess().getFullStopKeyword_3());
              		
            }
            // InternalESAML.g:4463:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalESAML.g:4464:4: (lv_name_4_0= RULE_ID )
            {
            // InternalESAML.g:4464:4: (lv_name_4_0= RULE_ID )
            // InternalESAML.g:4465:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_74); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getStateImplAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getStateImplRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:4481:3: (otherlv_5= 'entry' otherlv_6= 'operations' ( (lv_entryOperations_7_0= ruleOperation ) )+ )?
            int alt90=2;
            int LA90_0 = input.LA(1);

            if ( (LA90_0==73) ) {
                alt90=1;
            }
            switch (alt90) {
                case 1 :
                    // InternalESAML.g:4482:4: otherlv_5= 'entry' otherlv_6= 'operations' ( (lv_entryOperations_7_0= ruleOperation ) )+
                    {
                    otherlv_5=(Token)match(input,73,FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getStateImplAccess().getEntryKeyword_5_0());
                      			
                    }
                    otherlv_6=(Token)match(input,65,FOLLOW_55); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_6, grammarAccess.getStateImplAccess().getOperationsKeyword_5_1());
                      			
                    }
                    // InternalESAML.g:4490:4: ( (lv_entryOperations_7_0= ruleOperation ) )+
                    int cnt89=0;
                    loop89:
                    do {
                        int alt89=2;
                        int LA89_0 = input.LA(1);

                        if ( (LA89_0==RULE_STRING) ) {
                            alt89=1;
                        }


                        switch (alt89) {
                    	case 1 :
                    	    // InternalESAML.g:4491:5: (lv_entryOperations_7_0= ruleOperation )
                    	    {
                    	    // InternalESAML.g:4491:5: (lv_entryOperations_7_0= ruleOperation )
                    	    // InternalESAML.g:4492:6: lv_entryOperations_7_0= ruleOperation
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getStateImplAccess().getEntryOperationsOperationParserRuleCall_5_2_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_76);
                    	    lv_entryOperations_7_0=ruleOperation();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getStateImplRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"entryOperations",
                    	      							lv_entryOperations_7_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Operation");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt89 >= 1 ) break loop89;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(89, input);
                                throw eee;
                        }
                        cnt89++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:4510:3: (otherlv_8= 'during' otherlv_9= 'operations' ( (lv_duringOperations_10_0= ruleOperation ) )+ )?
            int alt92=2;
            int LA92_0 = input.LA(1);

            if ( (LA92_0==74) ) {
                alt92=1;
            }
            switch (alt92) {
                case 1 :
                    // InternalESAML.g:4511:4: otherlv_8= 'during' otherlv_9= 'operations' ( (lv_duringOperations_10_0= ruleOperation ) )+
                    {
                    otherlv_8=(Token)match(input,74,FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_8, grammarAccess.getStateImplAccess().getDuringKeyword_6_0());
                      			
                    }
                    otherlv_9=(Token)match(input,65,FOLLOW_55); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_9, grammarAccess.getStateImplAccess().getOperationsKeyword_6_1());
                      			
                    }
                    // InternalESAML.g:4519:4: ( (lv_duringOperations_10_0= ruleOperation ) )+
                    int cnt91=0;
                    loop91:
                    do {
                        int alt91=2;
                        int LA91_0 = input.LA(1);

                        if ( (LA91_0==RULE_STRING) ) {
                            alt91=1;
                        }


                        switch (alt91) {
                    	case 1 :
                    	    // InternalESAML.g:4520:5: (lv_duringOperations_10_0= ruleOperation )
                    	    {
                    	    // InternalESAML.g:4520:5: (lv_duringOperations_10_0= ruleOperation )
                    	    // InternalESAML.g:4521:6: lv_duringOperations_10_0= ruleOperation
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getStateImplAccess().getDuringOperationsOperationParserRuleCall_6_2_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_77);
                    	    lv_duringOperations_10_0=ruleOperation();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getStateImplRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"duringOperations",
                    	      							lv_duringOperations_10_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Operation");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt91 >= 1 ) break loop91;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(91, input);
                                throw eee;
                        }
                        cnt91++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:4539:3: (otherlv_11= 'exit' otherlv_12= 'operations' ( (lv_exitOperations_13_0= ruleOperation ) )+ )?
            int alt94=2;
            int LA94_0 = input.LA(1);

            if ( (LA94_0==75) ) {
                alt94=1;
            }
            switch (alt94) {
                case 1 :
                    // InternalESAML.g:4540:4: otherlv_11= 'exit' otherlv_12= 'operations' ( (lv_exitOperations_13_0= ruleOperation ) )+
                    {
                    otherlv_11=(Token)match(input,75,FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_11, grammarAccess.getStateImplAccess().getExitKeyword_7_0());
                      			
                    }
                    otherlv_12=(Token)match(input,65,FOLLOW_55); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_12, grammarAccess.getStateImplAccess().getOperationsKeyword_7_1());
                      			
                    }
                    // InternalESAML.g:4548:4: ( (lv_exitOperations_13_0= ruleOperation ) )+
                    int cnt93=0;
                    loop93:
                    do {
                        int alt93=2;
                        int LA93_0 = input.LA(1);

                        if ( (LA93_0==RULE_STRING) ) {
                            alt93=1;
                        }


                        switch (alt93) {
                    	case 1 :
                    	    // InternalESAML.g:4549:5: (lv_exitOperations_13_0= ruleOperation )
                    	    {
                    	    // InternalESAML.g:4549:5: (lv_exitOperations_13_0= ruleOperation )
                    	    // InternalESAML.g:4550:6: lv_exitOperations_13_0= ruleOperation
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getStateImplAccess().getExitOperationsOperationParserRuleCall_7_2_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_78);
                    	    lv_exitOperations_13_0=ruleOperation();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getStateImplRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"exitOperations",
                    	      							lv_exitOperations_13_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Operation");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt93 >= 1 ) break loop93;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(93, input);
                                throw eee;
                        }
                        cnt93++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:4568:3: ( ( 'end' )=>otherlv_14= 'end' )
            // InternalESAML.g:4569:4: ( 'end' )=>otherlv_14= 'end'
            {
            otherlv_14=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_14, grammarAccess.getStateImplAccess().getEndKeyword_8());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleStateImpl"


    // $ANTLR start "entryRuleTimeTriggerImpl"
    // InternalESAML.g:4579:1: entryRuleTimeTriggerImpl returns [EObject current=null] : iv_ruleTimeTriggerImpl= ruleTimeTriggerImpl EOF ;
    public final EObject entryRuleTimeTriggerImpl() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTimeTriggerImpl = null;


        try {
            // InternalESAML.g:4579:56: (iv_ruleTimeTriggerImpl= ruleTimeTriggerImpl EOF )
            // InternalESAML.g:4580:2: iv_ruleTimeTriggerImpl= ruleTimeTriggerImpl EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTimeTriggerImplRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleTimeTriggerImpl=ruleTimeTriggerImpl();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTimeTriggerImpl; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTimeTriggerImpl"


    // $ANTLR start "ruleTimeTriggerImpl"
    // InternalESAML.g:4586:1: ruleTimeTriggerImpl returns [EObject current=null] : (otherlv_0= 'timetrigger' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'constraints' ( (lv_constraints_6_0= ruleConstraint ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) ) ;
    public final EObject ruleTimeTriggerImpl() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_constraints_6_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:4592:2: ( (otherlv_0= 'timetrigger' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'constraints' ( (lv_constraints_6_0= ruleConstraint ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) ) )
            // InternalESAML.g:4593:2: (otherlv_0= 'timetrigger' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'constraints' ( (lv_constraints_6_0= ruleConstraint ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) )
            {
            // InternalESAML.g:4593:2: (otherlv_0= 'timetrigger' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'constraints' ( (lv_constraints_6_0= ruleConstraint ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) )
            // InternalESAML.g:4594:3: otherlv_0= 'timetrigger' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'constraints' ( (lv_constraints_6_0= ruleConstraint ) )+ )? ( ( 'end' )=>otherlv_7= 'end' )
            {
            otherlv_0=(Token)match(input,43,FOLLOW_57); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getTimeTriggerImplAccess().getTimetriggerKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,66,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getTimeTriggerImplAccess().getImplementationKeyword_1());
              		
            }
            // InternalESAML.g:4602:3: ( (otherlv_2= RULE_ID ) )
            // InternalESAML.g:4603:4: (otherlv_2= RULE_ID )
            {
            // InternalESAML.g:4603:4: (otherlv_2= RULE_ID )
            // InternalESAML.g:4604:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getTimeTriggerImplRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getTimeTriggerImplAccess().getOwnedRealizationTimeTriggerTypeCrossReference_2_0());
              				
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getTimeTriggerImplAccess().getFullStopKeyword_3());
              		
            }
            // InternalESAML.g:4619:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalESAML.g:4620:4: (lv_name_4_0= RULE_ID )
            {
            // InternalESAML.g:4620:4: (lv_name_4_0= RULE_ID )
            // InternalESAML.g:4621:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_79); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getTimeTriggerImplAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getTimeTriggerImplRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:4637:3: (otherlv_5= 'constraints' ( (lv_constraints_6_0= ruleConstraint ) )+ )?
            int alt96=2;
            int LA96_0 = input.LA(1);

            if ( (LA96_0==76) ) {
                alt96=1;
            }
            switch (alt96) {
                case 1 :
                    // InternalESAML.g:4638:4: otherlv_5= 'constraints' ( (lv_constraints_6_0= ruleConstraint ) )+
                    {
                    otherlv_5=(Token)match(input,76,FOLLOW_80); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getTimeTriggerImplAccess().getConstraintsKeyword_5_0());
                      			
                    }
                    // InternalESAML.g:4642:4: ( (lv_constraints_6_0= ruleConstraint ) )+
                    int cnt95=0;
                    loop95:
                    do {
                        int alt95=2;
                        int LA95_0 = input.LA(1);

                        if ( (LA95_0==RULE_ID||LA95_0==RULE_IMPLNAME||(LA95_0>=47 && LA95_0<=48)) ) {
                            alt95=1;
                        }


                        switch (alt95) {
                    	case 1 :
                    	    // InternalESAML.g:4643:5: (lv_constraints_6_0= ruleConstraint )
                    	    {
                    	    // InternalESAML.g:4643:5: (lv_constraints_6_0= ruleConstraint )
                    	    // InternalESAML.g:4644:6: lv_constraints_6_0= ruleConstraint
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getTimeTriggerImplAccess().getConstraintsConstraintParserRuleCall_5_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_81);
                    	    lv_constraints_6_0=ruleConstraint();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getTimeTriggerImplRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"constraints",
                    	      							lv_constraints_6_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Constraint");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt95 >= 1 ) break loop95;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(95, input);
                                throw eee;
                        }
                        cnt95++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:4662:3: ( ( 'end' )=>otherlv_7= 'end' )
            // InternalESAML.g:4663:4: ( 'end' )=>otherlv_7= 'end'
            {
            otherlv_7=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_7, grammarAccess.getTimeTriggerImplAccess().getEndKeyword_6());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTimeTriggerImpl"


    // $ANTLR start "entryRuleMonitorImpl"
    // InternalESAML.g:4673:1: entryRuleMonitorImpl returns [EObject current=null] : iv_ruleMonitorImpl= ruleMonitorImpl EOF ;
    public final EObject entryRuleMonitorImpl() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMonitorImpl = null;


        try {
            // InternalESAML.g:4673:52: (iv_ruleMonitorImpl= ruleMonitorImpl EOF )
            // InternalESAML.g:4674:2: iv_ruleMonitorImpl= ruleMonitorImpl EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMonitorImplRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleMonitorImpl=ruleMonitorImpl();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMonitorImpl; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMonitorImpl"


    // $ANTLR start "ruleMonitorImpl"
    // InternalESAML.g:4680:1: ruleMonitorImpl returns [EObject current=null] : (otherlv_0= 'monitor' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'operations' ( (lv_operations_6_0= ruleOperation ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) ) ;
    public final EObject ruleMonitorImpl() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_operations_6_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:4686:2: ( (otherlv_0= 'monitor' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'operations' ( (lv_operations_6_0= ruleOperation ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) ) )
            // InternalESAML.g:4687:2: (otherlv_0= 'monitor' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'operations' ( (lv_operations_6_0= ruleOperation ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) )
            {
            // InternalESAML.g:4687:2: (otherlv_0= 'monitor' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'operations' ( (lv_operations_6_0= ruleOperation ) )+ )? ( ( 'end' )=>otherlv_7= 'end' ) )
            // InternalESAML.g:4688:3: otherlv_0= 'monitor' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) (otherlv_5= 'operations' ( (lv_operations_6_0= ruleOperation ) )+ )? ( ( 'end' )=>otherlv_7= 'end' )
            {
            otherlv_0=(Token)match(input,44,FOLLOW_57); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getMonitorImplAccess().getMonitorKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,66,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getMonitorImplAccess().getImplementationKeyword_1());
              		
            }
            // InternalESAML.g:4696:3: ( (otherlv_2= RULE_ID ) )
            // InternalESAML.g:4697:4: (otherlv_2= RULE_ID )
            {
            // InternalESAML.g:4697:4: (otherlv_2= RULE_ID )
            // InternalESAML.g:4698:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getMonitorImplRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getMonitorImplAccess().getOwnedRealizationMonitorTypeCrossReference_2_0());
              				
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getMonitorImplAccess().getFullStopKeyword_3());
              		
            }
            // InternalESAML.g:4713:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalESAML.g:4714:4: (lv_name_4_0= RULE_ID )
            {
            // InternalESAML.g:4714:4: (lv_name_4_0= RULE_ID )
            // InternalESAML.g:4715:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_82); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getMonitorImplAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getMonitorImplRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:4731:3: (otherlv_5= 'operations' ( (lv_operations_6_0= ruleOperation ) )+ )?
            int alt98=2;
            int LA98_0 = input.LA(1);

            if ( (LA98_0==65) ) {
                alt98=1;
            }
            switch (alt98) {
                case 1 :
                    // InternalESAML.g:4732:4: otherlv_5= 'operations' ( (lv_operations_6_0= ruleOperation ) )+
                    {
                    otherlv_5=(Token)match(input,65,FOLLOW_55); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getMonitorImplAccess().getOperationsKeyword_5_0());
                      			
                    }
                    // InternalESAML.g:4736:4: ( (lv_operations_6_0= ruleOperation ) )+
                    int cnt97=0;
                    loop97:
                    do {
                        int alt97=2;
                        int LA97_0 = input.LA(1);

                        if ( (LA97_0==RULE_STRING) ) {
                            alt97=1;
                        }


                        switch (alt97) {
                    	case 1 :
                    	    // InternalESAML.g:4737:5: (lv_operations_6_0= ruleOperation )
                    	    {
                    	    // InternalESAML.g:4737:5: (lv_operations_6_0= ruleOperation )
                    	    // InternalESAML.g:4738:6: lv_operations_6_0= ruleOperation
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getMonitorImplAccess().getOperationsOperationParserRuleCall_5_1_0());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_78);
                    	    lv_operations_6_0=ruleOperation();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						if (current==null) {
                    	      							current = createModelElementForParent(grammarAccess.getMonitorImplRule());
                    	      						}
                    	      						add(
                    	      							current,
                    	      							"operations",
                    	      							lv_operations_6_0,
                    	      							"com.peppa.xtext.esaml.ESAML.Operation");
                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt97 >= 1 ) break loop97;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(97, input);
                                throw eee;
                        }
                        cnt97++;
                    } while (true);


                    }
                    break;

            }

            // InternalESAML.g:4756:3: ( ( 'end' )=>otherlv_7= 'end' )
            // InternalESAML.g:4757:4: ( 'end' )=>otherlv_7= 'end'
            {
            otherlv_7=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_7, grammarAccess.getMonitorImplAccess().getEndKeyword_6());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMonitorImpl"


    // $ANTLR start "entryRuleDataComponentImpl"
    // InternalESAML.g:4767:1: entryRuleDataComponentImpl returns [EObject current=null] : iv_ruleDataComponentImpl= ruleDataComponentImpl EOF ;
    public final EObject entryRuleDataComponentImpl() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDataComponentImpl = null;


        try {
            // InternalESAML.g:4767:58: (iv_ruleDataComponentImpl= ruleDataComponentImpl EOF )
            // InternalESAML.g:4768:2: iv_ruleDataComponentImpl= ruleDataComponentImpl EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDataComponentImplRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleDataComponentImpl=ruleDataComponentImpl();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDataComponentImpl; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDataComponentImpl"


    // $ANTLR start "ruleDataComponentImpl"
    // InternalESAML.g:4774:1: ruleDataComponentImpl returns [EObject current=null] : (otherlv_0= 'data' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) ( (lv_addressBindings_5_0= ruleAddressBinding ) )+ ( ( 'end' )=>otherlv_6= 'end' ) ) ;
    public final EObject ruleDataComponentImpl() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_name_4_0=null;
        Token otherlv_6=null;
        EObject lv_addressBindings_5_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:4780:2: ( (otherlv_0= 'data' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) ( (lv_addressBindings_5_0= ruleAddressBinding ) )+ ( ( 'end' )=>otherlv_6= 'end' ) ) )
            // InternalESAML.g:4781:2: (otherlv_0= 'data' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) ( (lv_addressBindings_5_0= ruleAddressBinding ) )+ ( ( 'end' )=>otherlv_6= 'end' ) )
            {
            // InternalESAML.g:4781:2: (otherlv_0= 'data' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) ( (lv_addressBindings_5_0= ruleAddressBinding ) )+ ( ( 'end' )=>otherlv_6= 'end' ) )
            // InternalESAML.g:4782:3: otherlv_0= 'data' otherlv_1= 'implementation' ( (otherlv_2= RULE_ID ) ) otherlv_3= '.' ( (lv_name_4_0= RULE_ID ) ) ( (lv_addressBindings_5_0= ruleAddressBinding ) )+ ( ( 'end' )=>otherlv_6= 'end' )
            {
            otherlv_0=(Token)match(input,25,FOLLOW_57); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getDataComponentImplAccess().getDataKeyword_0());
              		
            }
            otherlv_1=(Token)match(input,66,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getDataComponentImplAccess().getImplementationKeyword_1());
              		
            }
            // InternalESAML.g:4790:3: ( (otherlv_2= RULE_ID ) )
            // InternalESAML.g:4791:4: (otherlv_2= RULE_ID )
            {
            // InternalESAML.g:4791:4: (otherlv_2= RULE_ID )
            // InternalESAML.g:4792:5: otherlv_2= RULE_ID
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDataComponentImplRule());
              					}
              				
            }
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_36); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getDataComponentImplAccess().getOwnedRealizationDataComponentTypeCrossReference_2_0());
              				
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getDataComponentImplAccess().getFullStopKeyword_3());
              		
            }
            // InternalESAML.g:4807:3: ( (lv_name_4_0= RULE_ID ) )
            // InternalESAML.g:4808:4: (lv_name_4_0= RULE_ID )
            {
            // InternalESAML.g:4808:4: (lv_name_4_0= RULE_ID )
            // InternalESAML.g:4809:5: lv_name_4_0= RULE_ID
            {
            lv_name_4_0=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_4_0, grammarAccess.getDataComponentImplAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getDataComponentImplRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_4_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:4825:3: ( (lv_addressBindings_5_0= ruleAddressBinding ) )+
            int cnt99=0;
            loop99:
            do {
                int alt99=2;
                int LA99_0 = input.LA(1);

                if ( (LA99_0==RULE_ID) ) {
                    alt99=1;
                }


                switch (alt99) {
            	case 1 :
            	    // InternalESAML.g:4826:4: (lv_addressBindings_5_0= ruleAddressBinding )
            	    {
            	    // InternalESAML.g:4826:4: (lv_addressBindings_5_0= ruleAddressBinding )
            	    // InternalESAML.g:4827:5: lv_addressBindings_5_0= ruleAddressBinding
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getDataComponentImplAccess().getAddressBindingsAddressBindingParserRuleCall_5_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_63);
            	    lv_addressBindings_5_0=ruleAddressBinding();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getDataComponentImplRule());
            	      					}
            	      					add(
            	      						current,
            	      						"addressBindings",
            	      						lv_addressBindings_5_0,
            	      						"com.peppa.xtext.esaml.ESAML.AddressBinding");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt99 >= 1 ) break loop99;
            	    if (state.backtracking>0) {state.failed=true; return current;}
                        EarlyExitException eee =
                            new EarlyExitException(99, input);
                        throw eee;
                }
                cnt99++;
            } while (true);

            // InternalESAML.g:4844:3: ( ( 'end' )=>otherlv_6= 'end' )
            // InternalESAML.g:4845:4: ( 'end' )=>otherlv_6= 'end'
            {
            otherlv_6=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_6, grammarAccess.getDataComponentImplAccess().getEndKeyword_6());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDataComponentImpl"


    // $ANTLR start "entryRuleEnumType"
    // InternalESAML.g:4855:1: entryRuleEnumType returns [EObject current=null] : iv_ruleEnumType= ruleEnumType EOF ;
    public final EObject entryRuleEnumType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEnumType = null;


        try {
            // InternalESAML.g:4855:49: (iv_ruleEnumType= ruleEnumType EOF )
            // InternalESAML.g:4856:2: iv_ruleEnumType= ruleEnumType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getEnumTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleEnumType=ruleEnumType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleEnumType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEnumType"


    // $ANTLR start "ruleEnumType"
    // InternalESAML.g:4862:1: ruleEnumType returns [EObject current=null] : (otherlv_0= 'enum' ( (lv_name_1_0= RULE_ID ) ) ( (lv_items_2_0= ruleEnumItem ) )+ ( ( 'end' )=>otherlv_3= 'end' ) ) ;
    public final EObject ruleEnumType() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_3=null;
        EObject lv_items_2_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:4868:2: ( (otherlv_0= 'enum' ( (lv_name_1_0= RULE_ID ) ) ( (lv_items_2_0= ruleEnumItem ) )+ ( ( 'end' )=>otherlv_3= 'end' ) ) )
            // InternalESAML.g:4869:2: (otherlv_0= 'enum' ( (lv_name_1_0= RULE_ID ) ) ( (lv_items_2_0= ruleEnumItem ) )+ ( ( 'end' )=>otherlv_3= 'end' ) )
            {
            // InternalESAML.g:4869:2: (otherlv_0= 'enum' ( (lv_name_1_0= RULE_ID ) ) ( (lv_items_2_0= ruleEnumItem ) )+ ( ( 'end' )=>otherlv_3= 'end' ) )
            // InternalESAML.g:4870:3: otherlv_0= 'enum' ( (lv_name_1_0= RULE_ID ) ) ( (lv_items_2_0= ruleEnumItem ) )+ ( ( 'end' )=>otherlv_3= 'end' )
            {
            otherlv_0=(Token)match(input,32,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getEnumTypeAccess().getEnumKeyword_0());
              		
            }
            // InternalESAML.g:4874:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalESAML.g:4875:4: (lv_name_1_0= RULE_ID )
            {
            // InternalESAML.g:4875:4: (lv_name_1_0= RULE_ID )
            // InternalESAML.g:4876:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getEnumTypeAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getEnumTypeRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:4892:3: ( (lv_items_2_0= ruleEnumItem ) )+
            int cnt100=0;
            loop100:
            do {
                int alt100=2;
                int LA100_0 = input.LA(1);

                if ( (LA100_0==RULE_ID) ) {
                    alt100=1;
                }


                switch (alt100) {
            	case 1 :
            	    // InternalESAML.g:4893:4: (lv_items_2_0= ruleEnumItem )
            	    {
            	    // InternalESAML.g:4893:4: (lv_items_2_0= ruleEnumItem )
            	    // InternalESAML.g:4894:5: lv_items_2_0= ruleEnumItem
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getEnumTypeAccess().getItemsEnumItemParserRuleCall_2_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_63);
            	    lv_items_2_0=ruleEnumItem();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getEnumTypeRule());
            	      					}
            	      					add(
            	      						current,
            	      						"items",
            	      						lv_items_2_0,
            	      						"com.peppa.xtext.esaml.ESAML.EnumItem");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt100 >= 1 ) break loop100;
            	    if (state.backtracking>0) {state.failed=true; return current;}
                        EarlyExitException eee =
                            new EarlyExitException(100, input);
                        throw eee;
                }
                cnt100++;
            } while (true);

            // InternalESAML.g:4911:3: ( ( 'end' )=>otherlv_3= 'end' )
            // InternalESAML.g:4912:4: ( 'end' )=>otherlv_3= 'end'
            {
            otherlv_3=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_3, grammarAccess.getEnumTypeAccess().getEndKeyword_3());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEnumType"


    // $ANTLR start "entryRuleEnumItem"
    // InternalESAML.g:4922:1: entryRuleEnumItem returns [EObject current=null] : iv_ruleEnumItem= ruleEnumItem EOF ;
    public final EObject entryRuleEnumItem() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEnumItem = null;


        try {
            // InternalESAML.g:4922:49: (iv_ruleEnumItem= ruleEnumItem EOF )
            // InternalESAML.g:4923:2: iv_ruleEnumItem= ruleEnumItem EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getEnumItemRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleEnumItem=ruleEnumItem();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleEnumItem; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEnumItem"


    // $ANTLR start "ruleEnumItem"
    // InternalESAML.g:4929:1: ruleEnumItem returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '=' ( (lv_value_2_0= RULE_INT ) ) )? ( ( ';' )=>otherlv_3= ';' ) ) ;
    public final EObject ruleEnumItem() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        Token lv_value_2_0=null;
        Token otherlv_3=null;


        	enterRule();

        try {
            // InternalESAML.g:4935:2: ( ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '=' ( (lv_value_2_0= RULE_INT ) ) )? ( ( ';' )=>otherlv_3= ';' ) ) )
            // InternalESAML.g:4936:2: ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '=' ( (lv_value_2_0= RULE_INT ) ) )? ( ( ';' )=>otherlv_3= ';' ) )
            {
            // InternalESAML.g:4936:2: ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '=' ( (lv_value_2_0= RULE_INT ) ) )? ( ( ';' )=>otherlv_3= ';' ) )
            // InternalESAML.g:4937:3: ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '=' ( (lv_value_2_0= RULE_INT ) ) )? ( ( ';' )=>otherlv_3= ';' )
            {
            // InternalESAML.g:4937:3: ( (lv_name_0_0= RULE_ID ) )
            // InternalESAML.g:4938:4: (lv_name_0_0= RULE_ID )
            {
            // InternalESAML.g:4938:4: (lv_name_0_0= RULE_ID )
            // InternalESAML.g:4939:5: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_83); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_0_0, grammarAccess.getEnumItemAccess().getNameIDTerminalRuleCall_0_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getEnumItemRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_0_0,
              						"org.eclipse.xtext.common.Terminals.ID");
              				
            }

            }


            }

            // InternalESAML.g:4955:3: (otherlv_1= '=' ( (lv_value_2_0= RULE_INT ) ) )?
            int alt101=2;
            int LA101_0 = input.LA(1);

            if ( (LA101_0==45) ) {
                alt101=1;
            }
            switch (alt101) {
                case 1 :
                    // InternalESAML.g:4956:4: otherlv_1= '=' ( (lv_value_2_0= RULE_INT ) )
                    {
                    otherlv_1=(Token)match(input,45,FOLLOW_84); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getEnumItemAccess().getEqualsSignKeyword_1_0());
                      			
                    }
                    // InternalESAML.g:4960:4: ( (lv_value_2_0= RULE_INT ) )
                    // InternalESAML.g:4961:5: (lv_value_2_0= RULE_INT )
                    {
                    // InternalESAML.g:4961:5: (lv_value_2_0= RULE_INT )
                    // InternalESAML.g:4962:6: lv_value_2_0= RULE_INT
                    {
                    lv_value_2_0=(Token)match(input,RULE_INT,FOLLOW_9); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_value_2_0, grammarAccess.getEnumItemAccess().getValueINTTerminalRuleCall_1_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getEnumItemRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"value",
                      							lv_value_2_0,
                      							"org.eclipse.xtext.common.Terminals.INT");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalESAML.g:4979:3: ( ( ';' )=>otherlv_3= ';' )
            // InternalESAML.g:4980:4: ( ';' )=>otherlv_3= ';'
            {
            otherlv_3=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_3, grammarAccess.getEnumItemAccess().getSemicolonKeyword_2());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEnumItem"


    // $ANTLR start "entryRuleVariableType"
    // InternalESAML.g:4990:1: entryRuleVariableType returns [EObject current=null] : iv_ruleVariableType= ruleVariableType EOF ;
    public final EObject entryRuleVariableType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleVariableType = null;


        try {
            // InternalESAML.g:4990:53: (iv_ruleVariableType= ruleVariableType EOF )
            // InternalESAML.g:4991:2: iv_ruleVariableType= ruleVariableType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getVariableTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleVariableType=ruleVariableType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleVariableType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleVariableType"


    // $ANTLR start "ruleVariableType"
    // InternalESAML.g:4997:1: ruleVariableType returns [EObject current=null] : ( ( ( (lv_type_0_1= ruleBASE_TYPE | lv_type_0_2= ruleCompositeType ) ) ) ( (lv_isArray_1_0= '[' ) )? ( (lv_length_2_0= RULE_INT ) )? (otherlv_3= ']' )? ) ;
    public final EObject ruleVariableType() throws RecognitionException {
        EObject current = null;

        Token lv_isArray_1_0=null;
        Token lv_length_2_0=null;
        Token otherlv_3=null;
        EObject lv_type_0_1 = null;

        EObject lv_type_0_2 = null;



        	enterRule();

        try {
            // InternalESAML.g:5003:2: ( ( ( ( (lv_type_0_1= ruleBASE_TYPE | lv_type_0_2= ruleCompositeType ) ) ) ( (lv_isArray_1_0= '[' ) )? ( (lv_length_2_0= RULE_INT ) )? (otherlv_3= ']' )? ) )
            // InternalESAML.g:5004:2: ( ( ( (lv_type_0_1= ruleBASE_TYPE | lv_type_0_2= ruleCompositeType ) ) ) ( (lv_isArray_1_0= '[' ) )? ( (lv_length_2_0= RULE_INT ) )? (otherlv_3= ']' )? )
            {
            // InternalESAML.g:5004:2: ( ( ( (lv_type_0_1= ruleBASE_TYPE | lv_type_0_2= ruleCompositeType ) ) ) ( (lv_isArray_1_0= '[' ) )? ( (lv_length_2_0= RULE_INT ) )? (otherlv_3= ']' )? )
            // InternalESAML.g:5005:3: ( ( (lv_type_0_1= ruleBASE_TYPE | lv_type_0_2= ruleCompositeType ) ) ) ( (lv_isArray_1_0= '[' ) )? ( (lv_length_2_0= RULE_INT ) )? (otherlv_3= ']' )?
            {
            // InternalESAML.g:5005:3: ( ( (lv_type_0_1= ruleBASE_TYPE | lv_type_0_2= ruleCompositeType ) ) )
            // InternalESAML.g:5006:4: ( (lv_type_0_1= ruleBASE_TYPE | lv_type_0_2= ruleCompositeType ) )
            {
            // InternalESAML.g:5006:4: ( (lv_type_0_1= ruleBASE_TYPE | lv_type_0_2= ruleCompositeType ) )
            // InternalESAML.g:5007:5: (lv_type_0_1= ruleBASE_TYPE | lv_type_0_2= ruleCompositeType )
            {
            // InternalESAML.g:5007:5: (lv_type_0_1= ruleBASE_TYPE | lv_type_0_2= ruleCompositeType )
            int alt102=2;
            int LA102_0 = input.LA(1);

            if ( ((LA102_0>=77 && LA102_0<=84)) ) {
                alt102=1;
            }
            else if ( (LA102_0==RULE_ID) ) {
                alt102=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 102, 0, input);

                throw nvae;
            }
            switch (alt102) {
                case 1 :
                    // InternalESAML.g:5008:6: lv_type_0_1= ruleBASE_TYPE
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getVariableTypeAccess().getTypeBASE_TYPEParserRuleCall_0_0_0());
                      					
                    }
                    pushFollow(FOLLOW_85);
                    lv_type_0_1=ruleBASE_TYPE();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getVariableTypeRule());
                      						}
                      						set(
                      							current,
                      							"type",
                      							lv_type_0_1,
                      							"com.peppa.xtext.esaml.ESAML.BASE_TYPE");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:5024:6: lv_type_0_2= ruleCompositeType
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getVariableTypeAccess().getTypeCompositeTypeParserRuleCall_0_0_1());
                      					
                    }
                    pushFollow(FOLLOW_85);
                    lv_type_0_2=ruleCompositeType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getVariableTypeRule());
                      						}
                      						set(
                      							current,
                      							"type",
                      							lv_type_0_2,
                      							"com.peppa.xtext.esaml.ESAML.CompositeType");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }
                    break;

            }


            }


            }

            // InternalESAML.g:5042:3: ( (lv_isArray_1_0= '[' ) )?
            int alt103=2;
            int LA103_0 = input.LA(1);

            if ( (LA103_0==55) ) {
                alt103=1;
            }
            switch (alt103) {
                case 1 :
                    // InternalESAML.g:5043:4: (lv_isArray_1_0= '[' )
                    {
                    // InternalESAML.g:5043:4: (lv_isArray_1_0= '[' )
                    // InternalESAML.g:5044:5: lv_isArray_1_0= '['
                    {
                    lv_isArray_1_0=(Token)match(input,55,FOLLOW_86); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_isArray_1_0, grammarAccess.getVariableTypeAccess().getIsArrayLeftSquareBracketKeyword_1_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getVariableTypeRule());
                      					}
                      					setWithLastConsumed(current, "isArray", lv_isArray_1_0 != null, "[");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalESAML.g:5056:3: ( (lv_length_2_0= RULE_INT ) )?
            int alt104=2;
            int LA104_0 = input.LA(1);

            if ( (LA104_0==RULE_INT) ) {
                alt104=1;
            }
            switch (alt104) {
                case 1 :
                    // InternalESAML.g:5057:4: (lv_length_2_0= RULE_INT )
                    {
                    // InternalESAML.g:5057:4: (lv_length_2_0= RULE_INT )
                    // InternalESAML.g:5058:5: lv_length_2_0= RULE_INT
                    {
                    lv_length_2_0=(Token)match(input,RULE_INT,FOLLOW_87); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_length_2_0, grammarAccess.getVariableTypeAccess().getLengthINTTerminalRuleCall_2_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getVariableTypeRule());
                      					}
                      					setWithLastConsumed(
                      						current,
                      						"length",
                      						lv_length_2_0,
                      						"org.eclipse.xtext.common.Terminals.INT");
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalESAML.g:5074:3: (otherlv_3= ']' )?
            int alt105=2;
            int LA105_0 = input.LA(1);

            if ( (LA105_0==56) ) {
                alt105=1;
            }
            switch (alt105) {
                case 1 :
                    // InternalESAML.g:5075:4: otherlv_3= ']'
                    {
                    otherlv_3=(Token)match(input,56,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getVariableTypeAccess().getRightSquareBracketKeyword_3());
                      			
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleVariableType"


    // $ANTLR start "entryRuleBASE_TYPE"
    // InternalESAML.g:5084:1: entryRuleBASE_TYPE returns [EObject current=null] : iv_ruleBASE_TYPE= ruleBASE_TYPE EOF ;
    public final EObject entryRuleBASE_TYPE() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBASE_TYPE = null;


        try {
            // InternalESAML.g:5084:50: (iv_ruleBASE_TYPE= ruleBASE_TYPE EOF )
            // InternalESAML.g:5085:2: iv_ruleBASE_TYPE= ruleBASE_TYPE EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getBASE_TYPERule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleBASE_TYPE=ruleBASE_TYPE();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleBASE_TYPE; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBASE_TYPE"


    // $ANTLR start "ruleBASE_TYPE"
    // InternalESAML.g:5091:1: ruleBASE_TYPE returns [EObject current=null] : ( ( (lv_typeName_0_1= 'void' | lv_typeName_0_2= 'bool' | lv_typeName_0_3= 'char' | lv_typeName_0_4= 'short' | lv_typeName_0_5= 'int' | lv_typeName_0_6= 'long' | lv_typeName_0_7= 'float' | lv_typeName_0_8= 'double' ) ) ) ;
    public final EObject ruleBASE_TYPE() throws RecognitionException {
        EObject current = null;

        Token lv_typeName_0_1=null;
        Token lv_typeName_0_2=null;
        Token lv_typeName_0_3=null;
        Token lv_typeName_0_4=null;
        Token lv_typeName_0_5=null;
        Token lv_typeName_0_6=null;
        Token lv_typeName_0_7=null;
        Token lv_typeName_0_8=null;


        	enterRule();

        try {
            // InternalESAML.g:5097:2: ( ( ( (lv_typeName_0_1= 'void' | lv_typeName_0_2= 'bool' | lv_typeName_0_3= 'char' | lv_typeName_0_4= 'short' | lv_typeName_0_5= 'int' | lv_typeName_0_6= 'long' | lv_typeName_0_7= 'float' | lv_typeName_0_8= 'double' ) ) ) )
            // InternalESAML.g:5098:2: ( ( (lv_typeName_0_1= 'void' | lv_typeName_0_2= 'bool' | lv_typeName_0_3= 'char' | lv_typeName_0_4= 'short' | lv_typeName_0_5= 'int' | lv_typeName_0_6= 'long' | lv_typeName_0_7= 'float' | lv_typeName_0_8= 'double' ) ) )
            {
            // InternalESAML.g:5098:2: ( ( (lv_typeName_0_1= 'void' | lv_typeName_0_2= 'bool' | lv_typeName_0_3= 'char' | lv_typeName_0_4= 'short' | lv_typeName_0_5= 'int' | lv_typeName_0_6= 'long' | lv_typeName_0_7= 'float' | lv_typeName_0_8= 'double' ) ) )
            // InternalESAML.g:5099:3: ( (lv_typeName_0_1= 'void' | lv_typeName_0_2= 'bool' | lv_typeName_0_3= 'char' | lv_typeName_0_4= 'short' | lv_typeName_0_5= 'int' | lv_typeName_0_6= 'long' | lv_typeName_0_7= 'float' | lv_typeName_0_8= 'double' ) )
            {
            // InternalESAML.g:5099:3: ( (lv_typeName_0_1= 'void' | lv_typeName_0_2= 'bool' | lv_typeName_0_3= 'char' | lv_typeName_0_4= 'short' | lv_typeName_0_5= 'int' | lv_typeName_0_6= 'long' | lv_typeName_0_7= 'float' | lv_typeName_0_8= 'double' ) )
            // InternalESAML.g:5100:4: (lv_typeName_0_1= 'void' | lv_typeName_0_2= 'bool' | lv_typeName_0_3= 'char' | lv_typeName_0_4= 'short' | lv_typeName_0_5= 'int' | lv_typeName_0_6= 'long' | lv_typeName_0_7= 'float' | lv_typeName_0_8= 'double' )
            {
            // InternalESAML.g:5100:4: (lv_typeName_0_1= 'void' | lv_typeName_0_2= 'bool' | lv_typeName_0_3= 'char' | lv_typeName_0_4= 'short' | lv_typeName_0_5= 'int' | lv_typeName_0_6= 'long' | lv_typeName_0_7= 'float' | lv_typeName_0_8= 'double' )
            int alt106=8;
            switch ( input.LA(1) ) {
            case 77:
                {
                alt106=1;
                }
                break;
            case 78:
                {
                alt106=2;
                }
                break;
            case 79:
                {
                alt106=3;
                }
                break;
            case 80:
                {
                alt106=4;
                }
                break;
            case 81:
                {
                alt106=5;
                }
                break;
            case 82:
                {
                alt106=6;
                }
                break;
            case 83:
                {
                alt106=7;
                }
                break;
            case 84:
                {
                alt106=8;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 106, 0, input);

                throw nvae;
            }

            switch (alt106) {
                case 1 :
                    // InternalESAML.g:5101:5: lv_typeName_0_1= 'void'
                    {
                    lv_typeName_0_1=(Token)match(input,77,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_typeName_0_1, grammarAccess.getBASE_TYPEAccess().getTypeNameVoidKeyword_0_0());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getBASE_TYPERule());
                      					}
                      					setWithLastConsumed(current, "typeName", lv_typeName_0_1, null);
                      				
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:5112:5: lv_typeName_0_2= 'bool'
                    {
                    lv_typeName_0_2=(Token)match(input,78,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_typeName_0_2, grammarAccess.getBASE_TYPEAccess().getTypeNameBoolKeyword_0_1());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getBASE_TYPERule());
                      					}
                      					setWithLastConsumed(current, "typeName", lv_typeName_0_2, null);
                      				
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:5123:5: lv_typeName_0_3= 'char'
                    {
                    lv_typeName_0_3=(Token)match(input,79,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_typeName_0_3, grammarAccess.getBASE_TYPEAccess().getTypeNameCharKeyword_0_2());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getBASE_TYPERule());
                      					}
                      					setWithLastConsumed(current, "typeName", lv_typeName_0_3, null);
                      				
                    }

                    }
                    break;
                case 4 :
                    // InternalESAML.g:5134:5: lv_typeName_0_4= 'short'
                    {
                    lv_typeName_0_4=(Token)match(input,80,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_typeName_0_4, grammarAccess.getBASE_TYPEAccess().getTypeNameShortKeyword_0_3());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getBASE_TYPERule());
                      					}
                      					setWithLastConsumed(current, "typeName", lv_typeName_0_4, null);
                      				
                    }

                    }
                    break;
                case 5 :
                    // InternalESAML.g:5145:5: lv_typeName_0_5= 'int'
                    {
                    lv_typeName_0_5=(Token)match(input,81,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_typeName_0_5, grammarAccess.getBASE_TYPEAccess().getTypeNameIntKeyword_0_4());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getBASE_TYPERule());
                      					}
                      					setWithLastConsumed(current, "typeName", lv_typeName_0_5, null);
                      				
                    }

                    }
                    break;
                case 6 :
                    // InternalESAML.g:5156:5: lv_typeName_0_6= 'long'
                    {
                    lv_typeName_0_6=(Token)match(input,82,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_typeName_0_6, grammarAccess.getBASE_TYPEAccess().getTypeNameLongKeyword_0_5());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getBASE_TYPERule());
                      					}
                      					setWithLastConsumed(current, "typeName", lv_typeName_0_6, null);
                      				
                    }

                    }
                    break;
                case 7 :
                    // InternalESAML.g:5167:5: lv_typeName_0_7= 'float'
                    {
                    lv_typeName_0_7=(Token)match(input,83,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_typeName_0_7, grammarAccess.getBASE_TYPEAccess().getTypeNameFloatKeyword_0_6());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getBASE_TYPERule());
                      					}
                      					setWithLastConsumed(current, "typeName", lv_typeName_0_7, null);
                      				
                    }

                    }
                    break;
                case 8 :
                    // InternalESAML.g:5178:5: lv_typeName_0_8= 'double'
                    {
                    lv_typeName_0_8=(Token)match(input,84,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(lv_typeName_0_8, grammarAccess.getBASE_TYPEAccess().getTypeNameDoubleKeyword_0_7());
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElement(grammarAccess.getBASE_TYPERule());
                      					}
                      					setWithLastConsumed(current, "typeName", lv_typeName_0_8, null);
                      				
                    }

                    }
                    break;

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBASE_TYPE"


    // $ANTLR start "entryRuleCompositeType"
    // InternalESAML.g:5194:1: entryRuleCompositeType returns [EObject current=null] : iv_ruleCompositeType= ruleCompositeType EOF ;
    public final EObject entryRuleCompositeType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCompositeType = null;


        try {
            // InternalESAML.g:5194:54: (iv_ruleCompositeType= ruleCompositeType EOF )
            // InternalESAML.g:5195:2: iv_ruleCompositeType= ruleCompositeType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCompositeTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleCompositeType=ruleCompositeType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCompositeType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCompositeType"


    // $ANTLR start "ruleCompositeType"
    // InternalESAML.g:5201:1: ruleCompositeType returns [EObject current=null] : ( (otherlv_0= RULE_ID ) ) ;
    public final EObject ruleCompositeType() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;


        	enterRule();

        try {
            // InternalESAML.g:5207:2: ( ( (otherlv_0= RULE_ID ) ) )
            // InternalESAML.g:5208:2: ( (otherlv_0= RULE_ID ) )
            {
            // InternalESAML.g:5208:2: ( (otherlv_0= RULE_ID ) )
            // InternalESAML.g:5209:3: (otherlv_0= RULE_ID )
            {
            // InternalESAML.g:5209:3: (otherlv_0= RULE_ID )
            // InternalESAML.g:5210:4: otherlv_0= RULE_ID
            {
            if ( state.backtracking==0 ) {

              				if (current==null) {
              					current = createModelElement(grammarAccess.getCompositeTypeRule());
              				}
              			
            }
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_0, grammarAccess.getCompositeTypeAccess().getDataComponentTypeDataComponentTypeCrossReference_0());
              			
            }

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCompositeType"


    // $ANTLR start "entryRuleNumericValue"
    // InternalESAML.g:5224:1: entryRuleNumericValue returns [String current=null] : iv_ruleNumericValue= ruleNumericValue EOF ;
    public final String entryRuleNumericValue() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleNumericValue = null;


        try {
            // InternalESAML.g:5224:52: (iv_ruleNumericValue= ruleNumericValue EOF )
            // InternalESAML.g:5225:2: iv_ruleNumericValue= ruleNumericValue EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNumericValueRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleNumericValue=ruleNumericValue();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNumericValue.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNumericValue"


    // $ANTLR start "ruleNumericValue"
    // InternalESAML.g:5231:1: ruleNumericValue returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_INT_0= RULE_INT | this_DOUBLE_1= RULE_DOUBLE ) ;
    public final AntlrDatatypeRuleToken ruleNumericValue() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_INT_0=null;
        Token this_DOUBLE_1=null;


        	enterRule();

        try {
            // InternalESAML.g:5237:2: ( (this_INT_0= RULE_INT | this_DOUBLE_1= RULE_DOUBLE ) )
            // InternalESAML.g:5238:2: (this_INT_0= RULE_INT | this_DOUBLE_1= RULE_DOUBLE )
            {
            // InternalESAML.g:5238:2: (this_INT_0= RULE_INT | this_DOUBLE_1= RULE_DOUBLE )
            int alt107=2;
            int LA107_0 = input.LA(1);

            if ( (LA107_0==RULE_INT) ) {
                alt107=1;
            }
            else if ( (LA107_0==RULE_DOUBLE) ) {
                alt107=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 107, 0, input);

                throw nvae;
            }
            switch (alt107) {
                case 1 :
                    // InternalESAML.g:5239:3: this_INT_0= RULE_INT
                    {
                    this_INT_0=(Token)match(input,RULE_INT,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(this_INT_0);
                      		
                    }
                    if ( state.backtracking==0 ) {

                      			newLeafNode(this_INT_0, grammarAccess.getNumericValueAccess().getINTTerminalRuleCall_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:5247:3: this_DOUBLE_1= RULE_DOUBLE
                    {
                    this_DOUBLE_1=(Token)match(input,RULE_DOUBLE,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(this_DOUBLE_1);
                      		
                    }
                    if ( state.backtracking==0 ) {

                      			newLeafNode(this_DOUBLE_1, grammarAccess.getNumericValueAccess().getDOUBLETerminalRuleCall_1());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNumericValue"


    // $ANTLR start "entryRuleMODIFIER"
    // InternalESAML.g:5258:1: entryRuleMODIFIER returns [String current=null] : iv_ruleMODIFIER= ruleMODIFIER EOF ;
    public final String entryRuleMODIFIER() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleMODIFIER = null;


        try {
            // InternalESAML.g:5258:48: (iv_ruleMODIFIER= ruleMODIFIER EOF )
            // InternalESAML.g:5259:2: iv_ruleMODIFIER= ruleMODIFIER EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMODIFIERRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleMODIFIER=ruleMODIFIER();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMODIFIER.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMODIFIER"


    // $ANTLR start "ruleMODIFIER"
    // InternalESAML.g:5265:1: ruleMODIFIER returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'xorsplit' | kw= 'xorjoin' | kw= 'andsplit' | kw= 'andjoin' ) ;
    public final AntlrDatatypeRuleToken ruleMODIFIER() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalESAML.g:5271:2: ( (kw= 'xorsplit' | kw= 'xorjoin' | kw= 'andsplit' | kw= 'andjoin' ) )
            // InternalESAML.g:5272:2: (kw= 'xorsplit' | kw= 'xorjoin' | kw= 'andsplit' | kw= 'andjoin' )
            {
            // InternalESAML.g:5272:2: (kw= 'xorsplit' | kw= 'xorjoin' | kw= 'andsplit' | kw= 'andjoin' )
            int alt108=4;
            switch ( input.LA(1) ) {
            case 85:
                {
                alt108=1;
                }
                break;
            case 86:
                {
                alt108=2;
                }
                break;
            case 87:
                {
                alt108=3;
                }
                break;
            case 88:
                {
                alt108=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 108, 0, input);

                throw nvae;
            }

            switch (alt108) {
                case 1 :
                    // InternalESAML.g:5273:3: kw= 'xorsplit'
                    {
                    kw=(Token)match(input,85,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getMODIFIERAccess().getXorsplitKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:5279:3: kw= 'xorjoin'
                    {
                    kw=(Token)match(input,86,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getMODIFIERAccess().getXorjoinKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:5285:3: kw= 'andsplit'
                    {
                    kw=(Token)match(input,87,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getMODIFIERAccess().getAndsplitKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalESAML.g:5291:3: kw= 'andjoin'
                    {
                    kw=(Token)match(input,88,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getMODIFIERAccess().getAndjoinKeyword_3());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMODIFIER"


    // $ANTLR start "entryRuleBooleanExpression"
    // InternalESAML.g:5300:1: entryRuleBooleanExpression returns [String current=null] : iv_ruleBooleanExpression= ruleBooleanExpression EOF ;
    public final String entryRuleBooleanExpression() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleBooleanExpression = null;


        try {
            // InternalESAML.g:5300:57: (iv_ruleBooleanExpression= ruleBooleanExpression EOF )
            // InternalESAML.g:5301:2: iv_ruleBooleanExpression= ruleBooleanExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getBooleanExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleBooleanExpression=ruleBooleanExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleBooleanExpression.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBooleanExpression"


    // $ANTLR start "ruleBooleanExpression"
    // InternalESAML.g:5307:1: ruleBooleanExpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_OrExpression_0= ruleOrExpression ;
    public final AntlrDatatypeRuleToken ruleBooleanExpression() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        AntlrDatatypeRuleToken this_OrExpression_0 = null;



        	enterRule();

        try {
            // InternalESAML.g:5313:2: (this_OrExpression_0= ruleOrExpression )
            // InternalESAML.g:5314:2: this_OrExpression_0= ruleOrExpression
            {
            if ( state.backtracking==0 ) {

              		newCompositeNode(grammarAccess.getBooleanExpressionAccess().getOrExpressionParserRuleCall());
              	
            }
            pushFollow(FOLLOW_2);
            this_OrExpression_0=ruleOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(this_OrExpression_0);
              	
            }
            if ( state.backtracking==0 ) {

              		afterParserOrEnumRuleCall();
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBooleanExpression"


    // $ANTLR start "entryRuleOrExpression"
    // InternalESAML.g:5327:1: entryRuleOrExpression returns [String current=null] : iv_ruleOrExpression= ruleOrExpression EOF ;
    public final String entryRuleOrExpression() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOrExpression = null;


        try {
            // InternalESAML.g:5327:52: (iv_ruleOrExpression= ruleOrExpression EOF )
            // InternalESAML.g:5328:2: iv_ruleOrExpression= ruleOrExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOrExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOrExpression=ruleOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOrExpression.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOrExpression"


    // $ANTLR start "ruleOrExpression"
    // InternalESAML.g:5334:1: ruleOrExpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_AndExpression_0= ruleAndExpression (kw= '||' this_AndExpression_2= ruleAndExpression )* ) ;
    public final AntlrDatatypeRuleToken ruleOrExpression() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_AndExpression_0 = null;

        AntlrDatatypeRuleToken this_AndExpression_2 = null;



        	enterRule();

        try {
            // InternalESAML.g:5340:2: ( (this_AndExpression_0= ruleAndExpression (kw= '||' this_AndExpression_2= ruleAndExpression )* ) )
            // InternalESAML.g:5341:2: (this_AndExpression_0= ruleAndExpression (kw= '||' this_AndExpression_2= ruleAndExpression )* )
            {
            // InternalESAML.g:5341:2: (this_AndExpression_0= ruleAndExpression (kw= '||' this_AndExpression_2= ruleAndExpression )* )
            // InternalESAML.g:5342:3: this_AndExpression_0= ruleAndExpression (kw= '||' this_AndExpression_2= ruleAndExpression )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getOrExpressionAccess().getAndExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_88);
            this_AndExpression_0=ruleAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_AndExpression_0);
              		
            }
            if ( state.backtracking==0 ) {

              			afterParserOrEnumRuleCall();
              		
            }
            // InternalESAML.g:5352:3: (kw= '||' this_AndExpression_2= ruleAndExpression )*
            loop109:
            do {
                int alt109=2;
                int LA109_0 = input.LA(1);

                if ( (LA109_0==89) ) {
                    alt109=1;
                }


                switch (alt109) {
            	case 1 :
            	    // InternalESAML.g:5353:4: kw= '||' this_AndExpression_2= ruleAndExpression
            	    {
            	    kw=(Token)match(input,89,FOLLOW_47); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(kw);
            	      				newLeafNode(kw, grammarAccess.getOrExpressionAccess().getVerticalLineVerticalLineKeyword_1_0());
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				newCompositeNode(grammarAccess.getOrExpressionAccess().getAndExpressionParserRuleCall_1_1());
            	      			
            	    }
            	    pushFollow(FOLLOW_88);
            	    this_AndExpression_2=ruleAndExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_AndExpression_2);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				afterParserOrEnumRuleCall();
            	      			
            	    }

            	    }
            	    break;

            	default :
            	    break loop109;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOrExpression"


    // $ANTLR start "entryRuleAndExpression"
    // InternalESAML.g:5373:1: entryRuleAndExpression returns [String current=null] : iv_ruleAndExpression= ruleAndExpression EOF ;
    public final String entryRuleAndExpression() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleAndExpression = null;


        try {
            // InternalESAML.g:5373:53: (iv_ruleAndExpression= ruleAndExpression EOF )
            // InternalESAML.g:5374:2: iv_ruleAndExpression= ruleAndExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAndExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleAndExpression=ruleAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAndExpression.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAndExpression"


    // $ANTLR start "ruleAndExpression"
    // InternalESAML.g:5380:1: ruleAndExpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_EqualityExpression_0= ruleEqualityExpression (kw= '&&' this_EqualityExpression_2= ruleEqualityExpression )* ) ;
    public final AntlrDatatypeRuleToken ruleAndExpression() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_EqualityExpression_0 = null;

        AntlrDatatypeRuleToken this_EqualityExpression_2 = null;



        	enterRule();

        try {
            // InternalESAML.g:5386:2: ( (this_EqualityExpression_0= ruleEqualityExpression (kw= '&&' this_EqualityExpression_2= ruleEqualityExpression )* ) )
            // InternalESAML.g:5387:2: (this_EqualityExpression_0= ruleEqualityExpression (kw= '&&' this_EqualityExpression_2= ruleEqualityExpression )* )
            {
            // InternalESAML.g:5387:2: (this_EqualityExpression_0= ruleEqualityExpression (kw= '&&' this_EqualityExpression_2= ruleEqualityExpression )* )
            // InternalESAML.g:5388:3: this_EqualityExpression_0= ruleEqualityExpression (kw= '&&' this_EqualityExpression_2= ruleEqualityExpression )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getAndExpressionAccess().getEqualityExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_89);
            this_EqualityExpression_0=ruleEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_EqualityExpression_0);
              		
            }
            if ( state.backtracking==0 ) {

              			afterParserOrEnumRuleCall();
              		
            }
            // InternalESAML.g:5398:3: (kw= '&&' this_EqualityExpression_2= ruleEqualityExpression )*
            loop110:
            do {
                int alt110=2;
                int LA110_0 = input.LA(1);

                if ( (LA110_0==90) ) {
                    alt110=1;
                }


                switch (alt110) {
            	case 1 :
            	    // InternalESAML.g:5399:4: kw= '&&' this_EqualityExpression_2= ruleEqualityExpression
            	    {
            	    kw=(Token)match(input,90,FOLLOW_47); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(kw);
            	      				newLeafNode(kw, grammarAccess.getAndExpressionAccess().getAmpersandAmpersandKeyword_1_0());
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				newCompositeNode(grammarAccess.getAndExpressionAccess().getEqualityExpressionParserRuleCall_1_1());
            	      			
            	    }
            	    pushFollow(FOLLOW_89);
            	    this_EqualityExpression_2=ruleEqualityExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_EqualityExpression_2);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				afterParserOrEnumRuleCall();
            	      			
            	    }

            	    }
            	    break;

            	default :
            	    break loop110;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAndExpression"


    // $ANTLR start "entryRuleEqualityExpression"
    // InternalESAML.g:5419:1: entryRuleEqualityExpression returns [String current=null] : iv_ruleEqualityExpression= ruleEqualityExpression EOF ;
    public final String entryRuleEqualityExpression() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleEqualityExpression = null;


        try {
            // InternalESAML.g:5419:58: (iv_ruleEqualityExpression= ruleEqualityExpression EOF )
            // InternalESAML.g:5420:2: iv_ruleEqualityExpression= ruleEqualityExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getEqualityExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleEqualityExpression=ruleEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleEqualityExpression.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEqualityExpression"


    // $ANTLR start "ruleEqualityExpression"
    // InternalESAML.g:5426:1: ruleEqualityExpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_RelationalExpression_0= ruleRelationalExpression ( (kw= '==' | kw= '!=' ) this_RelationalExpression_3= ruleRelationalExpression )? ) ;
    public final AntlrDatatypeRuleToken ruleEqualityExpression() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_RelationalExpression_0 = null;

        AntlrDatatypeRuleToken this_RelationalExpression_3 = null;



        	enterRule();

        try {
            // InternalESAML.g:5432:2: ( (this_RelationalExpression_0= ruleRelationalExpression ( (kw= '==' | kw= '!=' ) this_RelationalExpression_3= ruleRelationalExpression )? ) )
            // InternalESAML.g:5433:2: (this_RelationalExpression_0= ruleRelationalExpression ( (kw= '==' | kw= '!=' ) this_RelationalExpression_3= ruleRelationalExpression )? )
            {
            // InternalESAML.g:5433:2: (this_RelationalExpression_0= ruleRelationalExpression ( (kw= '==' | kw= '!=' ) this_RelationalExpression_3= ruleRelationalExpression )? )
            // InternalESAML.g:5434:3: this_RelationalExpression_0= ruleRelationalExpression ( (kw= '==' | kw= '!=' ) this_RelationalExpression_3= ruleRelationalExpression )?
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getEqualityExpressionAccess().getRelationalExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_90);
            this_RelationalExpression_0=ruleRelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_RelationalExpression_0);
              		
            }
            if ( state.backtracking==0 ) {

              			afterParserOrEnumRuleCall();
              		
            }
            // InternalESAML.g:5444:3: ( (kw= '==' | kw= '!=' ) this_RelationalExpression_3= ruleRelationalExpression )?
            int alt112=2;
            int LA112_0 = input.LA(1);

            if ( ((LA112_0>=91 && LA112_0<=92)) ) {
                alt112=1;
            }
            switch (alt112) {
                case 1 :
                    // InternalESAML.g:5445:4: (kw= '==' | kw= '!=' ) this_RelationalExpression_3= ruleRelationalExpression
                    {
                    // InternalESAML.g:5445:4: (kw= '==' | kw= '!=' )
                    int alt111=2;
                    int LA111_0 = input.LA(1);

                    if ( (LA111_0==91) ) {
                        alt111=1;
                    }
                    else if ( (LA111_0==92) ) {
                        alt111=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 111, 0, input);

                        throw nvae;
                    }
                    switch (alt111) {
                        case 1 :
                            // InternalESAML.g:5446:5: kw= '=='
                            {
                            kw=(Token)match(input,91,FOLLOW_47); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getEqualityExpressionAccess().getEqualsSignEqualsSignKeyword_1_0_0());
                              				
                            }

                            }
                            break;
                        case 2 :
                            // InternalESAML.g:5452:5: kw= '!='
                            {
                            kw=(Token)match(input,92,FOLLOW_47); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getEqualityExpressionAccess().getExclamationMarkEqualsSignKeyword_1_0_1());
                              				
                            }

                            }
                            break;

                    }

                    if ( state.backtracking==0 ) {

                      				newCompositeNode(grammarAccess.getEqualityExpressionAccess().getRelationalExpressionParserRuleCall_1_1());
                      			
                    }
                    pushFollow(FOLLOW_2);
                    this_RelationalExpression_3=ruleRelationalExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(this_RelationalExpression_3);
                      			
                    }
                    if ( state.backtracking==0 ) {

                      				afterParserOrEnumRuleCall();
                      			
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEqualityExpression"


    // $ANTLR start "entryRuleRelationalExpression"
    // InternalESAML.g:5473:1: entryRuleRelationalExpression returns [String current=null] : iv_ruleRelationalExpression= ruleRelationalExpression EOF ;
    public final String entryRuleRelationalExpression() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleRelationalExpression = null;


        try {
            // InternalESAML.g:5473:60: (iv_ruleRelationalExpression= ruleRelationalExpression EOF )
            // InternalESAML.g:5474:2: iv_ruleRelationalExpression= ruleRelationalExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRelationalExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleRelationalExpression=ruleRelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRelationalExpression.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRelationalExpression"


    // $ANTLR start "ruleRelationalExpression"
    // InternalESAML.g:5480:1: ruleRelationalExpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_AdditiveExpression_0= ruleAdditiveExpression ( (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' ) this_AdditiveExpression_5= ruleAdditiveExpression )? ) ;
    public final AntlrDatatypeRuleToken ruleRelationalExpression() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_AdditiveExpression_0 = null;

        AntlrDatatypeRuleToken this_AdditiveExpression_5 = null;



        	enterRule();

        try {
            // InternalESAML.g:5486:2: ( (this_AdditiveExpression_0= ruleAdditiveExpression ( (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' ) this_AdditiveExpression_5= ruleAdditiveExpression )? ) )
            // InternalESAML.g:5487:2: (this_AdditiveExpression_0= ruleAdditiveExpression ( (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' ) this_AdditiveExpression_5= ruleAdditiveExpression )? )
            {
            // InternalESAML.g:5487:2: (this_AdditiveExpression_0= ruleAdditiveExpression ( (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' ) this_AdditiveExpression_5= ruleAdditiveExpression )? )
            // InternalESAML.g:5488:3: this_AdditiveExpression_0= ruleAdditiveExpression ( (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' ) this_AdditiveExpression_5= ruleAdditiveExpression )?
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getRelationalExpressionAccess().getAdditiveExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_91);
            this_AdditiveExpression_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_AdditiveExpression_0);
              		
            }
            if ( state.backtracking==0 ) {

              			afterParserOrEnumRuleCall();
              		
            }
            // InternalESAML.g:5498:3: ( (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' ) this_AdditiveExpression_5= ruleAdditiveExpression )?
            int alt114=2;
            int LA114_0 = input.LA(1);

            if ( (LA114_0==60||(LA114_0>=93 && LA114_0<=94)) ) {
                alt114=1;
            }
            else if ( (LA114_0==46) ) {
                int LA114_2 = input.LA(2);

                if ( (LA114_2==RULE_IMPLNAME||(LA114_2>=RULE_INT && LA114_2<=RULE_DOUBLE)||(LA114_2>=95 && LA114_2<=96)||(LA114_2>=100 && LA114_2<=101)||(LA114_2>=103 && LA114_2<=104)) ) {
                    alt114=1;
                }
                else if ( (LA114_2==RULE_ID) ) {
                    int LA114_4 = input.LA(3);

                    if ( (LA114_4==EOF||LA114_4==46||(LA114_4>=89 && LA114_4<=92)||(LA114_4>=95 && LA114_4<=99)||LA114_4==102) ) {
                        alt114=1;
                    }
                }
            }
            switch (alt114) {
                case 1 :
                    // InternalESAML.g:5499:4: (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' ) this_AdditiveExpression_5= ruleAdditiveExpression
                    {
                    // InternalESAML.g:5499:4: (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' )
                    int alt113=4;
                    switch ( input.LA(1) ) {
                    case 60:
                        {
                        alt113=1;
                        }
                        break;
                    case 93:
                        {
                        alt113=2;
                        }
                        break;
                    case 46:
                        {
                        alt113=3;
                        }
                        break;
                    case 94:
                        {
                        alt113=4;
                        }
                        break;
                    default:
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 113, 0, input);

                        throw nvae;
                    }

                    switch (alt113) {
                        case 1 :
                            // InternalESAML.g:5500:5: kw= '<'
                            {
                            kw=(Token)match(input,60,FOLLOW_47); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getRelationalExpressionAccess().getLessThanSignKeyword_1_0_0());
                              				
                            }

                            }
                            break;
                        case 2 :
                            // InternalESAML.g:5506:5: kw= '<='
                            {
                            kw=(Token)match(input,93,FOLLOW_47); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getRelationalExpressionAccess().getLessThanSignEqualsSignKeyword_1_0_1());
                              				
                            }

                            }
                            break;
                        case 3 :
                            // InternalESAML.g:5512:5: kw= '>'
                            {
                            kw=(Token)match(input,46,FOLLOW_47); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getRelationalExpressionAccess().getGreaterThanSignKeyword_1_0_2());
                              				
                            }

                            }
                            break;
                        case 4 :
                            // InternalESAML.g:5518:5: kw= '>='
                            {
                            kw=(Token)match(input,94,FOLLOW_47); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getRelationalExpressionAccess().getGreaterThanSignEqualsSignKeyword_1_0_3());
                              				
                            }

                            }
                            break;

                    }

                    if ( state.backtracking==0 ) {

                      				newCompositeNode(grammarAccess.getRelationalExpressionAccess().getAdditiveExpressionParserRuleCall_1_1());
                      			
                    }
                    pushFollow(FOLLOW_2);
                    this_AdditiveExpression_5=ruleAdditiveExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(this_AdditiveExpression_5);
                      			
                    }
                    if ( state.backtracking==0 ) {

                      				afterParserOrEnumRuleCall();
                      			
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRelationalExpression"


    // $ANTLR start "entryRuleAdditiveExpression"
    // InternalESAML.g:5539:1: entryRuleAdditiveExpression returns [String current=null] : iv_ruleAdditiveExpression= ruleAdditiveExpression EOF ;
    public final String entryRuleAdditiveExpression() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleAdditiveExpression = null;


        try {
            // InternalESAML.g:5539:58: (iv_ruleAdditiveExpression= ruleAdditiveExpression EOF )
            // InternalESAML.g:5540:2: iv_ruleAdditiveExpression= ruleAdditiveExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAdditiveExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleAdditiveExpression=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAdditiveExpression.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAdditiveExpression"


    // $ANTLR start "ruleAdditiveExpression"
    // InternalESAML.g:5546:1: ruleAdditiveExpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_MultiplicativeExpression_0= ruleMultiplicativeExpression ( (kw= '+' | kw= '-' ) this_MultiplicativeExpression_3= ruleMultiplicativeExpression )* ) ;
    public final AntlrDatatypeRuleToken ruleAdditiveExpression() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_MultiplicativeExpression_0 = null;

        AntlrDatatypeRuleToken this_MultiplicativeExpression_3 = null;



        	enterRule();

        try {
            // InternalESAML.g:5552:2: ( (this_MultiplicativeExpression_0= ruleMultiplicativeExpression ( (kw= '+' | kw= '-' ) this_MultiplicativeExpression_3= ruleMultiplicativeExpression )* ) )
            // InternalESAML.g:5553:2: (this_MultiplicativeExpression_0= ruleMultiplicativeExpression ( (kw= '+' | kw= '-' ) this_MultiplicativeExpression_3= ruleMultiplicativeExpression )* )
            {
            // InternalESAML.g:5553:2: (this_MultiplicativeExpression_0= ruleMultiplicativeExpression ( (kw= '+' | kw= '-' ) this_MultiplicativeExpression_3= ruleMultiplicativeExpression )* )
            // InternalESAML.g:5554:3: this_MultiplicativeExpression_0= ruleMultiplicativeExpression ( (kw= '+' | kw= '-' ) this_MultiplicativeExpression_3= ruleMultiplicativeExpression )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getAdditiveExpressionAccess().getMultiplicativeExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_92);
            this_MultiplicativeExpression_0=ruleMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_MultiplicativeExpression_0);
              		
            }
            if ( state.backtracking==0 ) {

              			afterParserOrEnumRuleCall();
              		
            }
            // InternalESAML.g:5564:3: ( (kw= '+' | kw= '-' ) this_MultiplicativeExpression_3= ruleMultiplicativeExpression )*
            loop116:
            do {
                int alt116=2;
                int LA116_0 = input.LA(1);

                if ( ((LA116_0>=95 && LA116_0<=96)) ) {
                    alt116=1;
                }


                switch (alt116) {
            	case 1 :
            	    // InternalESAML.g:5565:4: (kw= '+' | kw= '-' ) this_MultiplicativeExpression_3= ruleMultiplicativeExpression
            	    {
            	    // InternalESAML.g:5565:4: (kw= '+' | kw= '-' )
            	    int alt115=2;
            	    int LA115_0 = input.LA(1);

            	    if ( (LA115_0==95) ) {
            	        alt115=1;
            	    }
            	    else if ( (LA115_0==96) ) {
            	        alt115=2;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 115, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt115) {
            	        case 1 :
            	            // InternalESAML.g:5566:5: kw= '+'
            	            {
            	            kw=(Token)match(input,95,FOLLOW_47); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					current.merge(kw);
            	              					newLeafNode(kw, grammarAccess.getAdditiveExpressionAccess().getPlusSignKeyword_1_0_0());
            	              				
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // InternalESAML.g:5572:5: kw= '-'
            	            {
            	            kw=(Token)match(input,96,FOLLOW_47); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					current.merge(kw);
            	              					newLeafNode(kw, grammarAccess.getAdditiveExpressionAccess().getHyphenMinusKeyword_1_0_1());
            	              				
            	            }

            	            }
            	            break;

            	    }

            	    if ( state.backtracking==0 ) {

            	      				newCompositeNode(grammarAccess.getAdditiveExpressionAccess().getMultiplicativeExpressionParserRuleCall_1_1());
            	      			
            	    }
            	    pushFollow(FOLLOW_92);
            	    this_MultiplicativeExpression_3=ruleMultiplicativeExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_MultiplicativeExpression_3);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				afterParserOrEnumRuleCall();
            	      			
            	    }

            	    }
            	    break;

            	default :
            	    break loop116;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAdditiveExpression"


    // $ANTLR start "entryRuleMultiplicativeExpression"
    // InternalESAML.g:5593:1: entryRuleMultiplicativeExpression returns [String current=null] : iv_ruleMultiplicativeExpression= ruleMultiplicativeExpression EOF ;
    public final String entryRuleMultiplicativeExpression() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleMultiplicativeExpression = null;


        try {
            // InternalESAML.g:5593:64: (iv_ruleMultiplicativeExpression= ruleMultiplicativeExpression EOF )
            // InternalESAML.g:5594:2: iv_ruleMultiplicativeExpression= ruleMultiplicativeExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMultiplicativeExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleMultiplicativeExpression=ruleMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMultiplicativeExpression.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMultiplicativeExpression"


    // $ANTLR start "ruleMultiplicativeExpression"
    // InternalESAML.g:5600:1: ruleMultiplicativeExpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_UnaryExpression_0= ruleUnaryExpression ( (kw= '*' | kw= '/' | kw= '%' ) this_UnaryExpression_4= ruleUnaryExpression )* ) ;
    public final AntlrDatatypeRuleToken ruleMultiplicativeExpression() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_UnaryExpression_0 = null;

        AntlrDatatypeRuleToken this_UnaryExpression_4 = null;



        	enterRule();

        try {
            // InternalESAML.g:5606:2: ( (this_UnaryExpression_0= ruleUnaryExpression ( (kw= '*' | kw= '/' | kw= '%' ) this_UnaryExpression_4= ruleUnaryExpression )* ) )
            // InternalESAML.g:5607:2: (this_UnaryExpression_0= ruleUnaryExpression ( (kw= '*' | kw= '/' | kw= '%' ) this_UnaryExpression_4= ruleUnaryExpression )* )
            {
            // InternalESAML.g:5607:2: (this_UnaryExpression_0= ruleUnaryExpression ( (kw= '*' | kw= '/' | kw= '%' ) this_UnaryExpression_4= ruleUnaryExpression )* )
            // InternalESAML.g:5608:3: this_UnaryExpression_0= ruleUnaryExpression ( (kw= '*' | kw= '/' | kw= '%' ) this_UnaryExpression_4= ruleUnaryExpression )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getMultiplicativeExpressionAccess().getUnaryExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_93);
            this_UnaryExpression_0=ruleUnaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_UnaryExpression_0);
              		
            }
            if ( state.backtracking==0 ) {

              			afterParserOrEnumRuleCall();
              		
            }
            // InternalESAML.g:5618:3: ( (kw= '*' | kw= '/' | kw= '%' ) this_UnaryExpression_4= ruleUnaryExpression )*
            loop118:
            do {
                int alt118=2;
                int LA118_0 = input.LA(1);

                if ( ((LA118_0>=97 && LA118_0<=99)) ) {
                    alt118=1;
                }


                switch (alt118) {
            	case 1 :
            	    // InternalESAML.g:5619:4: (kw= '*' | kw= '/' | kw= '%' ) this_UnaryExpression_4= ruleUnaryExpression
            	    {
            	    // InternalESAML.g:5619:4: (kw= '*' | kw= '/' | kw= '%' )
            	    int alt117=3;
            	    switch ( input.LA(1) ) {
            	    case 97:
            	        {
            	        alt117=1;
            	        }
            	        break;
            	    case 98:
            	        {
            	        alt117=2;
            	        }
            	        break;
            	    case 99:
            	        {
            	        alt117=3;
            	        }
            	        break;
            	    default:
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 117, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt117) {
            	        case 1 :
            	            // InternalESAML.g:5620:5: kw= '*'
            	            {
            	            kw=(Token)match(input,97,FOLLOW_47); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					current.merge(kw);
            	              					newLeafNode(kw, grammarAccess.getMultiplicativeExpressionAccess().getAsteriskKeyword_1_0_0());
            	              				
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // InternalESAML.g:5626:5: kw= '/'
            	            {
            	            kw=(Token)match(input,98,FOLLOW_47); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					current.merge(kw);
            	              					newLeafNode(kw, grammarAccess.getMultiplicativeExpressionAccess().getSolidusKeyword_1_0_1());
            	              				
            	            }

            	            }
            	            break;
            	        case 3 :
            	            // InternalESAML.g:5632:5: kw= '%'
            	            {
            	            kw=(Token)match(input,99,FOLLOW_47); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					current.merge(kw);
            	              					newLeafNode(kw, grammarAccess.getMultiplicativeExpressionAccess().getPercentSignKeyword_1_0_2());
            	              				
            	            }

            	            }
            	            break;

            	    }

            	    if ( state.backtracking==0 ) {

            	      				newCompositeNode(grammarAccess.getMultiplicativeExpressionAccess().getUnaryExpressionParserRuleCall_1_1());
            	      			
            	    }
            	    pushFollow(FOLLOW_93);
            	    this_UnaryExpression_4=ruleUnaryExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_UnaryExpression_4);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				afterParserOrEnumRuleCall();
            	      			
            	    }

            	    }
            	    break;

            	default :
            	    break loop118;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMultiplicativeExpression"


    // $ANTLR start "entryRuleUnaryExpression"
    // InternalESAML.g:5653:1: entryRuleUnaryExpression returns [String current=null] : iv_ruleUnaryExpression= ruleUnaryExpression EOF ;
    public final String entryRuleUnaryExpression() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleUnaryExpression = null;


        try {
            // InternalESAML.g:5653:55: (iv_ruleUnaryExpression= ruleUnaryExpression EOF )
            // InternalESAML.g:5654:2: iv_ruleUnaryExpression= ruleUnaryExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getUnaryExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleUnaryExpression=ruleUnaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleUnaryExpression.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUnaryExpression"


    // $ANTLR start "ruleUnaryExpression"
    // InternalESAML.g:5660:1: ruleUnaryExpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '+' | kw= '-' | kw= '!' )? this_PrimaryExpression_3= rulePrimaryExpression ) ;
    public final AntlrDatatypeRuleToken ruleUnaryExpression() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_PrimaryExpression_3 = null;



        	enterRule();

        try {
            // InternalESAML.g:5666:2: ( ( (kw= '+' | kw= '-' | kw= '!' )? this_PrimaryExpression_3= rulePrimaryExpression ) )
            // InternalESAML.g:5667:2: ( (kw= '+' | kw= '-' | kw= '!' )? this_PrimaryExpression_3= rulePrimaryExpression )
            {
            // InternalESAML.g:5667:2: ( (kw= '+' | kw= '-' | kw= '!' )? this_PrimaryExpression_3= rulePrimaryExpression )
            // InternalESAML.g:5668:3: (kw= '+' | kw= '-' | kw= '!' )? this_PrimaryExpression_3= rulePrimaryExpression
            {
            // InternalESAML.g:5668:3: (kw= '+' | kw= '-' | kw= '!' )?
            int alt119=4;
            switch ( input.LA(1) ) {
                case 95:
                    {
                    alt119=1;
                    }
                    break;
                case 96:
                    {
                    alt119=2;
                    }
                    break;
                case 100:
                    {
                    alt119=3;
                    }
                    break;
            }

            switch (alt119) {
                case 1 :
                    // InternalESAML.g:5669:4: kw= '+'
                    {
                    kw=(Token)match(input,95,FOLLOW_47); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getUnaryExpressionAccess().getPlusSignKeyword_0_0());
                      			
                    }

                    }
                    break;
                case 2 :
                    // InternalESAML.g:5675:4: kw= '-'
                    {
                    kw=(Token)match(input,96,FOLLOW_47); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getUnaryExpressionAccess().getHyphenMinusKeyword_0_1());
                      			
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:5681:4: kw= '!'
                    {
                    kw=(Token)match(input,100,FOLLOW_47); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getUnaryExpressionAccess().getExclamationMarkKeyword_0_2());
                      			
                    }

                    }
                    break;

            }

            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getUnaryExpressionAccess().getPrimaryExpressionParserRuleCall_1());
              		
            }
            pushFollow(FOLLOW_2);
            this_PrimaryExpression_3=rulePrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_PrimaryExpression_3);
              		
            }
            if ( state.backtracking==0 ) {

              			afterParserOrEnumRuleCall();
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUnaryExpression"


    // $ANTLR start "entryRulePrimaryExpression"
    // InternalESAML.g:5701:1: entryRulePrimaryExpression returns [String current=null] : iv_rulePrimaryExpression= rulePrimaryExpression EOF ;
    public final String entryRulePrimaryExpression() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_rulePrimaryExpression = null;


        try {
            // InternalESAML.g:5701:57: (iv_rulePrimaryExpression= rulePrimaryExpression EOF )
            // InternalESAML.g:5702:2: iv_rulePrimaryExpression= rulePrimaryExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPrimaryExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_rulePrimaryExpression=rulePrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePrimaryExpression.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePrimaryExpression"


    // $ANTLR start "rulePrimaryExpression"
    // InternalESAML.g:5708:1: rulePrimaryExpression returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '(' this_BooleanExpression_1= ruleBooleanExpression kw= ')' ) | kw= 'true' | kw= 'false' | this_ID_5= RULE_ID | this_NumericValue_6= ruleNumericValue | this_IMPLNAME_7= RULE_IMPLNAME ) ;
    public final AntlrDatatypeRuleToken rulePrimaryExpression() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        Token this_ID_5=null;
        Token this_IMPLNAME_7=null;
        AntlrDatatypeRuleToken this_BooleanExpression_1 = null;

        AntlrDatatypeRuleToken this_NumericValue_6 = null;



        	enterRule();

        try {
            // InternalESAML.g:5714:2: ( ( (kw= '(' this_BooleanExpression_1= ruleBooleanExpression kw= ')' ) | kw= 'true' | kw= 'false' | this_ID_5= RULE_ID | this_NumericValue_6= ruleNumericValue | this_IMPLNAME_7= RULE_IMPLNAME ) )
            // InternalESAML.g:5715:2: ( (kw= '(' this_BooleanExpression_1= ruleBooleanExpression kw= ')' ) | kw= 'true' | kw= 'false' | this_ID_5= RULE_ID | this_NumericValue_6= ruleNumericValue | this_IMPLNAME_7= RULE_IMPLNAME )
            {
            // InternalESAML.g:5715:2: ( (kw= '(' this_BooleanExpression_1= ruleBooleanExpression kw= ')' ) | kw= 'true' | kw= 'false' | this_ID_5= RULE_ID | this_NumericValue_6= ruleNumericValue | this_IMPLNAME_7= RULE_IMPLNAME )
            int alt120=6;
            switch ( input.LA(1) ) {
            case 101:
                {
                alt120=1;
                }
                break;
            case 103:
                {
                alt120=2;
                }
                break;
            case 104:
                {
                alt120=3;
                }
                break;
            case RULE_ID:
                {
                alt120=4;
                }
                break;
            case RULE_INT:
            case RULE_DOUBLE:
                {
                alt120=5;
                }
                break;
            case RULE_IMPLNAME:
                {
                alt120=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 120, 0, input);

                throw nvae;
            }

            switch (alt120) {
                case 1 :
                    // InternalESAML.g:5716:3: (kw= '(' this_BooleanExpression_1= ruleBooleanExpression kw= ')' )
                    {
                    // InternalESAML.g:5716:3: (kw= '(' this_BooleanExpression_1= ruleBooleanExpression kw= ')' )
                    // InternalESAML.g:5717:4: kw= '(' this_BooleanExpression_1= ruleBooleanExpression kw= ')'
                    {
                    kw=(Token)match(input,101,FOLLOW_47); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getPrimaryExpressionAccess().getLeftParenthesisKeyword_0_0());
                      			
                    }
                    if ( state.backtracking==0 ) {

                      				newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getBooleanExpressionParserRuleCall_0_1());
                      			
                    }
                    pushFollow(FOLLOW_94);
                    this_BooleanExpression_1=ruleBooleanExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(this_BooleanExpression_1);
                      			
                    }
                    if ( state.backtracking==0 ) {

                      				afterParserOrEnumRuleCall();
                      			
                    }
                    kw=(Token)match(input,102,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getPrimaryExpressionAccess().getRightParenthesisKeyword_0_2());
                      			
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalESAML.g:5739:3: kw= 'true'
                    {
                    kw=(Token)match(input,103,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getPrimaryExpressionAccess().getTrueKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalESAML.g:5745:3: kw= 'false'
                    {
                    kw=(Token)match(input,104,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getPrimaryExpressionAccess().getFalseKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalESAML.g:5751:3: this_ID_5= RULE_ID
                    {
                    this_ID_5=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(this_ID_5);
                      		
                    }
                    if ( state.backtracking==0 ) {

                      			newLeafNode(this_ID_5, grammarAccess.getPrimaryExpressionAccess().getIDTerminalRuleCall_3());
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalESAML.g:5759:3: this_NumericValue_6= ruleNumericValue
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getPrimaryExpressionAccess().getNumericValueParserRuleCall_4());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_NumericValue_6=ruleNumericValue();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(this_NumericValue_6);
                      		
                    }
                    if ( state.backtracking==0 ) {

                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalESAML.g:5770:3: this_IMPLNAME_7= RULE_IMPLNAME
                    {
                    this_IMPLNAME_7=(Token)match(input,RULE_IMPLNAME,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(this_IMPLNAME_7);
                      		
                    }
                    if ( state.backtracking==0 ) {

                      			newLeafNode(this_IMPLNAME_7, grammarAccess.getPrimaryExpressionAccess().getIMPLNAMETerminalRuleCall_5());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePrimaryExpression"

    // $ANTLR start synpred8_InternalESAML
    public final void synpred8_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:1284:4: ( 'end' )
        // InternalESAML.g:1284:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred8_InternalESAML

    // $ANTLR start synpred9_InternalESAML
    public final void synpred9_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:1382:4: ( 'end' )
        // InternalESAML.g:1382:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred9_InternalESAML

    // $ANTLR start synpred10_InternalESAML
    public final void synpred10_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:1499:4: ( 'end' )
        // InternalESAML.g:1499:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred10_InternalESAML

    // $ANTLR start synpred11_InternalESAML
    public final void synpred11_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:1572:4: ( 'end' )
        // InternalESAML.g:1572:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred11_InternalESAML

    // $ANTLR start synpred12_InternalESAML
    public final void synpred12_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:1670:4: ( 'end' )
        // InternalESAML.g:1670:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred12_InternalESAML

    // $ANTLR start synpred13_InternalESAML
    public final void synpred13_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:1743:4: ( 'end' )
        // InternalESAML.g:1743:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred13_InternalESAML

    // $ANTLR start synpred14_InternalESAML
    public final void synpred14_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:1810:4: ( 'end' )
        // InternalESAML.g:1810:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred14_InternalESAML

    // $ANTLR start synpred16_InternalESAML
    public final void synpred16_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:1934:4: ( ';' )
        // InternalESAML.g:1934:5: ';'
        {
        match(input,22,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred16_InternalESAML

    // $ANTLR start synpred24_InternalESAML
    public final void synpred24_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:3063:4: ( ';' )
        // InternalESAML.g:3063:5: ';'
        {
        match(input,22,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred24_InternalESAML

    // $ANTLR start synpred27_InternalESAML
    public final void synpred27_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:4057:4: ( 'end' )
        // InternalESAML.g:4057:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred27_InternalESAML

    // $ANTLR start synpred31_InternalESAML
    public final void synpred31_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:4569:4: ( 'end' )
        // InternalESAML.g:4569:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred31_InternalESAML

    // $ANTLR start synpred32_InternalESAML
    public final void synpred32_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:4663:4: ( 'end' )
        // InternalESAML.g:4663:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred32_InternalESAML

    // $ANTLR start synpred33_InternalESAML
    public final void synpred33_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:4757:4: ( 'end' )
        // InternalESAML.g:4757:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred33_InternalESAML

    // $ANTLR start synpred34_InternalESAML
    public final void synpred34_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:4845:4: ( 'end' )
        // InternalESAML.g:4845:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred34_InternalESAML

    // $ANTLR start synpred35_InternalESAML
    public final void synpred35_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:4912:4: ( 'end' )
        // InternalESAML.g:4912:5: 'end'
        {
        match(input,41,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred35_InternalESAML

    // $ANTLR start synpred36_InternalESAML
    public final void synpred36_InternalESAML_fragment() throws RecognitionException {   
        // InternalESAML.g:4980:4: ( ';' )
        // InternalESAML.g:4980:5: ';'
        {
        match(input,22,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred36_InternalESAML

    // Delegated rules

    public final boolean synpred12_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred12_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred24_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred24_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred9_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred9_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred10_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred10_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred16_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred16_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred31_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred31_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred36_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred36_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred11_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred11_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred32_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred32_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred27_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred27_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred35_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred35_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred14_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred14_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred8_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred8_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred33_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred33_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred34_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred34_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred13_InternalESAML() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred13_InternalESAML_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }


    protected DFA2 dfa2 = new DFA2(this);
    protected DFA11 dfa11 = new DFA11(this);
    protected DFA48 dfa48 = new DFA48(this);
    static final String dfa_1s = "\12\uffff";
    static final String dfa_2s = "\1\31\2\4\1\uffff\5\4\1\uffff";
    static final String dfa_3s = "\1\130\2\102\1\uffff\5\102\1\uffff";
    static final String dfa_4s = "\3\uffff\1\1\5\uffff\1\2";
    static final String dfa_5s = "\12\uffff}>";
    static final String[] dfa_6s = {
            "\1\10\6\uffff\1\3\3\uffff\1\1\1\2\1\4\3\uffff\1\5\1\6\1\7\50\uffff\4\3",
            "\1\3\75\uffff\1\11",
            "\1\3\75\uffff\1\11",
            "",
            "\1\3\75\uffff\1\11",
            "\1\3\75\uffff\1\11",
            "\1\3\75\uffff\1\11",
            "\1\3\75\uffff\1\11",
            "\1\3\75\uffff\1\11",
            ""
    };

    static final short[] dfa_1 = DFA.unpackEncodedString(dfa_1s);
    static final char[] dfa_2 = DFA.unpackEncodedStringToUnsignedChars(dfa_2s);
    static final char[] dfa_3 = DFA.unpackEncodedStringToUnsignedChars(dfa_3s);
    static final short[] dfa_4 = DFA.unpackEncodedString(dfa_4s);
    static final short[] dfa_5 = DFA.unpackEncodedString(dfa_5s);
    static final short[][] dfa_6 = unpackEncodedStringArray(dfa_6s);

    class DFA2 extends DFA {

        public DFA2(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 2;
            this.eot = dfa_1;
            this.eof = dfa_1;
            this.min = dfa_2;
            this.max = dfa_3;
            this.accept = dfa_4;
            this.special = dfa_5;
            this.transition = dfa_6;
        }
        public String getDescription() {
            return "114:2: (this_ComponentType_0= ruleComponentType | this_ComponentImpl_1= ruleComponentImpl )";
        }
    }
    static final String dfa_7s = "\25\uffff";
    static final String dfa_8s = "\1\4\1\uffff\13\4\2\uffff\3\4\1\uffff\1\4\1\uffff";
    static final String dfa_9s = "\1\124\1\uffff\1\124\11\70\1\4\2\uffff\2\70\1\41\1\uffff\1\41\1\uffff";
    static final String dfa_10s = "\1\uffff\1\1\13\uffff\1\2\1\3\3\uffff\1\4\1\uffff\1\5";
    static final String dfa_11s = "\25\uffff}>";
    static final String[] dfa_12s = {
            "\1\13\30\uffff\1\1\1\uffff\1\2\1\14\54\uffff\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
            "",
            "\1\15\33\uffff\1\16\54\uffff\10\15",
            "\1\15\4\uffff\1\20\27\uffff\1\22\25\uffff\1\17\1\21",
            "\1\15\4\uffff\1\20\27\uffff\1\22\25\uffff\1\17\1\21",
            "\1\15\4\uffff\1\20\27\uffff\1\22\25\uffff\1\17\1\21",
            "\1\15\4\uffff\1\20\27\uffff\1\22\25\uffff\1\17\1\21",
            "\1\15\4\uffff\1\20\27\uffff\1\22\25\uffff\1\17\1\21",
            "\1\15\4\uffff\1\20\27\uffff\1\22\25\uffff\1\17\1\21",
            "\1\15\4\uffff\1\20\27\uffff\1\22\25\uffff\1\17\1\21",
            "\1\15\4\uffff\1\20\27\uffff\1\22\25\uffff\1\17\1\21",
            "\1\15\4\uffff\1\20\27\uffff\1\22\25\uffff\1\17\1\21",
            "\1\23",
            "",
            "",
            "\1\15\4\uffff\1\20\27\uffff\1\22\26\uffff\1\21",
            "\1\15\34\uffff\1\22\26\uffff\1\21",
            "\1\15\34\uffff\1\22",
            "",
            "\1\16\34\uffff\1\24",
            ""
    };

    static final short[] dfa_7 = DFA.unpackEncodedString(dfa_7s);
    static final char[] dfa_8 = DFA.unpackEncodedStringToUnsignedChars(dfa_8s);
    static final char[] dfa_9 = DFA.unpackEncodedStringToUnsignedChars(dfa_9s);
    static final short[] dfa_10 = DFA.unpackEncodedString(dfa_10s);
    static final short[] dfa_11 = DFA.unpackEncodedString(dfa_11s);
    static final short[][] dfa_12 = unpackEncodedStringArray(dfa_12s);

    class DFA11 extends DFA {

        public DFA11(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 11;
            this.eot = dfa_7;
            this.eof = dfa_7;
            this.min = dfa_8;
            this.max = dfa_9;
            this.accept = dfa_10;
            this.special = dfa_11;
            this.transition = dfa_12;
        }
        public String getDescription() {
            return "618:2: (this_Period_0= rulePeriod | this_Variable_1= ruleVariable | this_EnumVariable_2= ruleEnumVariable | this_Reference_3= ruleReference | this_ReferenceEnum_4= ruleReferenceEnum )";
        }
    }
    static final String dfa_13s = "\34\uffff";
    static final String dfa_14s = "\1\4\1\63\1\31\1\4\1\34\1\70\1\4\1\63\1\64\1\uffff\1\27\1\4\3\25\1\43\1\4\1\25\2\4\1\uffff\1\64\1\uffff\1\4\1\43\1\uffff\2\4";
    static final String dfa_15s = "\1\4\1\67\1\31\1\4\1\34\1\70\1\73\1\63\1\64\1\uffff\1\31\1\4\1\25\1\31\1\25\1\72\1\73\1\25\2\73\1\uffff\1\64\1\uffff\1\4\1\72\1\uffff\2\73";
    static final String dfa_16s = "\11\uffff\1\4\12\uffff\1\2\1\uffff\1\3\2\uffff\1\1\2\uffff";
    static final String dfa_17s = "\34\uffff}>";
    static final String[] dfa_18s = {
            "\1\1",
            "\1\2\3\uffff\1\3",
            "\1\4",
            "\1\5",
            "\1\6",
            "\1\7",
            "\1\10\66\uffff\1\11",
            "\1\12",
            "\1\13",
            "",
            "\1\14\1\15\1\16",
            "\1\17",
            "\1\20",
            "\1\20\3\uffff\1\21",
            "\1\20",
            "\1\22\25\uffff\1\24\1\23",
            "\1\25\66\uffff\1\26",
            "\1\20",
            "\1\24\66\uffff\1\11",
            "\1\24\66\uffff\1\11",
            "",
            "\1\27",
            "",
            "\1\30",
            "\1\32\25\uffff\1\31\1\33",
            "",
            "\1\31\66\uffff\1\26",
            "\1\31\66\uffff\1\26"
    };

    static final short[] dfa_13 = DFA.unpackEncodedString(dfa_13s);
    static final char[] dfa_14 = DFA.unpackEncodedStringToUnsignedChars(dfa_14s);
    static final char[] dfa_15 = DFA.unpackEncodedStringToUnsignedChars(dfa_15s);
    static final short[] dfa_16 = DFA.unpackEncodedString(dfa_16s);
    static final short[] dfa_17 = DFA.unpackEncodedString(dfa_17s);
    static final short[][] dfa_18 = unpackEncodedStringArray(dfa_18s);

    class DFA48 extends DFA {

        public DFA48(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 48;
            this.eot = dfa_13;
            this.eof = dfa_13;
            this.min = dfa_14;
            this.max = dfa_15;
            this.accept = dfa_16;
            this.special = dfa_17;
            this.transition = dfa_18;
        }
        public String getDescription() {
            return "2678:2: (this_PortChannel_0= rulePortChannel | this_AccessChannel_1= ruleAccessChannel | this_SelfPortChannel_2= ruleSelfPortChannel | this_SelfAccessChannel_3= ruleSelfAccessChannel )";
        }
    }
 

    public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x00001C7102000002L,0x0000000001E00000L});
    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x00000000001E0000L});
    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x00000000001C0000L});
    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000003800000L});
    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000400000L});
    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000000600L});
    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000040000000L});
    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000000010L,0x00000000001FE000L});
    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000100000000L});
    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000200000000L});
    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000C00000000L});
    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000007000000000L});
    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000038000000000L});
    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x000000000C1F0000L});
    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x000003000C1F0000L});
    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x00000001A0000010L,0x00000000001FE000L});
    public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x00000201A0000010L,0x00000000001FE000L});
    public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x0000030000000000L});
    public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0000028000000000L});
    public static final BitSet FOLLOW_27 = new BitSet(new long[]{0x000002000C1F0000L});
    public static final BitSet FOLLOW_28 = new BitSet(new long[]{0x0000200000000000L});
    public static final BitSet FOLLOW_29 = new BitSet(new long[]{0x0000400000400000L});
    public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x0004000000000000L});
    public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x0003000000000000L});
    public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x0000000000000090L});
    public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_38 = new BitSet(new long[]{0x0080000000000000L});
    public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x0100000000000000L});
    public static final BitSet FOLLOW_40 = new BitSet(new long[]{0x0600000800000000L});
    public static final BitSet FOLLOW_41 = new BitSet(new long[]{0x0010000000400000L});
    public static final BitSet FOLLOW_42 = new BitSet(new long[]{0x0100000400000000L});
    public static final BitSet FOLLOW_43 = new BitSet(new long[]{0x0800000000000010L});
    public static final BitSet FOLLOW_44 = new BitSet(new long[]{0x0400000800000000L});
    public static final BitSet FOLLOW_45 = new BitSet(new long[]{0x0800000000000000L});
    public static final BitSet FOLLOW_46 = new BitSet(new long[]{0x1000000000000000L});
    public static final BitSet FOLLOW_47 = new BitSet(new long[]{0x0000000000000690L,0x000001B180000000L});
    public static final BitSet FOLLOW_48 = new BitSet(new long[]{0x0000400000000000L});
    public static final BitSet FOLLOW_49 = new BitSet(new long[]{0x0020004002000000L});
    public static final BitSet FOLLOW_50 = new BitSet(new long[]{0xC020004002000002L});
    public static final BitSet FOLLOW_51 = new BitSet(new long[]{0x8000000000000012L});
    public static final BitSet FOLLOW_52 = new BitSet(new long[]{0x0040040000000000L});
    public static final BitSet FOLLOW_53 = new BitSet(new long[]{0x0040040000000002L,0x0000000000000001L});
    public static final BitSet FOLLOW_54 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_55 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_56 = new BitSet(new long[]{0x0000000000000022L});
    public static final BitSet FOLLOW_57 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_58 = new BitSet(new long[]{0x2000030000000000L,0x0000000000000018L});
    public static final BitSet FOLLOW_59 = new BitSet(new long[]{0x2000030000000010L,0x0000000000000010L});
    public static final BitSet FOLLOW_60 = new BitSet(new long[]{0x20000201A0000010L,0x00000000001FE010L});
    public static final BitSet FOLLOW_61 = new BitSet(new long[]{0x0020186002000000L});
    public static final BitSet FOLLOW_62 = new BitSet(new long[]{0x00201A6002000000L,0x0000000000000010L});
    public static final BitSet FOLLOW_63 = new BitSet(new long[]{0x0000020000000010L});
    public static final BitSet FOLLOW_64 = new BitSet(new long[]{0xE000030000000000L,0x000000000000000AL});
    public static final BitSet FOLLOW_65 = new BitSet(new long[]{0xE000030000000010L,0x0000000000000002L});
    public static final BitSet FOLLOW_66 = new BitSet(new long[]{0xE0000201A0000010L,0x00000000001FE002L});
    public static final BitSet FOLLOW_67 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_68 = new BitSet(new long[]{0x2000030000000000L,0x0000000000000023L});
    public static final BitSet FOLLOW_69 = new BitSet(new long[]{0x20000201A0000010L,0x00000000001FE023L});
    public static final BitSet FOLLOW_70 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
    public static final BitSet FOLLOW_71 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000180L});
    public static final BitSet FOLLOW_72 = new BitSet(new long[]{0x0000000002200000L});
    public static final BitSet FOLLOW_73 = new BitSet(new long[]{0x2000020000000000L,0x0000000000000003L});
    public static final BitSet FOLLOW_74 = new BitSet(new long[]{0x0000020000000000L,0x0000000000000E00L});
    public static final BitSet FOLLOW_75 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_76 = new BitSet(new long[]{0x0000020000000020L,0x0000000000000C00L});
    public static final BitSet FOLLOW_77 = new BitSet(new long[]{0x0000020000000020L,0x0000000000000800L});
    public static final BitSet FOLLOW_78 = new BitSet(new long[]{0x0000020000000020L});
    public static final BitSet FOLLOW_79 = new BitSet(new long[]{0x0000020000000000L,0x0000000000001000L});
    public static final BitSet FOLLOW_80 = new BitSet(new long[]{0x0001800000000090L});
    public static final BitSet FOLLOW_81 = new BitSet(new long[]{0x0001820000000090L});
    public static final BitSet FOLLOW_82 = new BitSet(new long[]{0x0000020000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_83 = new BitSet(new long[]{0x0000200000400000L});
    public static final BitSet FOLLOW_84 = new BitSet(new long[]{0x0000000000000200L});
    public static final BitSet FOLLOW_85 = new BitSet(new long[]{0x0180000000000202L});
    public static final BitSet FOLLOW_86 = new BitSet(new long[]{0x0100000000000202L});
    public static final BitSet FOLLOW_87 = new BitSet(new long[]{0x0100000000000002L});
    public static final BitSet FOLLOW_88 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
    public static final BitSet FOLLOW_89 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
    public static final BitSet FOLLOW_90 = new BitSet(new long[]{0x0000000000000002L,0x0000000018000000L});
    public static final BitSet FOLLOW_91 = new BitSet(new long[]{0x1000400000000002L,0x0000000060000000L});
    public static final BitSet FOLLOW_92 = new BitSet(new long[]{0x0000000000000002L,0x0000000180000000L});
    public static final BitSet FOLLOW_93 = new BitSet(new long[]{0x0000000000000002L,0x0000000E00000000L});
    public static final BitSet FOLLOW_94 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});

}